Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Label text goes out of bounds #227

Open
Shishani58 opened this issue Apr 17, 2021 · 0 comments
Open

Label text goes out of bounds #227

Shishani58 opened this issue Apr 17, 2021 · 0 comments

Comments

@Shishani58
Copy link

Shishani58 commented Apr 17, 2021

Thank you for such an incredible library.
My issue:
In some cases, the text (it's arabic text) goes out of bounds and I can't understand why.
I tried calling sizeToFit, but it didn't help.
I attach a screenshot and a code
Screenshot 2021-04-17 at 04 47 00

import UIKit
import PinLayout

final class AyahCell: UITableViewCell {

    //MARK: Static properties
    /// Верхний отступ для arabicLabel (12)
    static let topMargin: CGFloat = 12
    /// Нижний отступ для arabicLabel (3)
    static let bottomMargin: CGFloat = 3
    /// Левый отступ для numberView (8)
    static let leftMargin: CGFloat = 8
    /// Правый отступ для arabicLabel (12)
    static let rightMargin: CGFloat = 8
    /// Левый отступ для arabicLabel (5)
    static let arabicLabelLeftMargin: CGFloat = 5
    /// Верхний отступ для numberView (5)
    static let numberViewTopMargin: CGFloat = 5
    /// Высота для numberView (35)
    static let numberViewWidth: CGFloat = 35
    /// Максимальная ширина arabicLabel
    static let maxWidth = UIScreen.main.bounds.width - AyahCell.leftMargin - AyahCell.rightMargin - AyahCell.numberViewWidth - AyahCell.arabicLabelLeftMargin
    
    //MARK: - Views
    private let separatorView = UIView()
    private let numberView = UIView()
    private let numberImageView = UIImageView(image: AyahCellResources.numberImage)
    private let arabicLabel: UILabel = {
        let label = UILabel(textAlignment: .right, numberOfLines: 0)
        return label
    }()
    private let numberLabel: UILabel = {
        let label = UILabel(textAlignment: .center, font: UIFont(name: "Georgia", size: 14), numberOfLines: 1)
        return label
    }()
    
    //MARK: - Properties
    var cellModel: AyahCellModel!
    
    //MARK: Init
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        selectionStyle = .none

        contentView.addSubview(separatorView)
        separatorView.pin.height(1)

        contentView.addSubview(numberView)
        numberView.addSubview(numberLabel)
        numberView.addSubview(numberImageView)

        contentView.addSubview(arabicLabel)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //MARK: - Layout
    override func layoutSubviews() {
        super.layoutSubviews()
        layout()
    }
    
    private func layout() {
        separatorView.pin.top().left().right()

        numberView.pin
            .below(of: separatorView)
            .marginTop(AyahCell.numberViewTopMargin)
            .left(AyahCell.leftMargin)
            .size(AyahCell.numberViewWidth)

        numberImageView.pin.all()
        numberLabel.pin.all()

        arabicLabel
            .pin
            .after(of: numberView)
            .marginLeft(AyahCell.arabicLabelLeftMargin)
            .top(AyahCell.topMargin)
            .right(AyahCell.rightMargin)
            .bottom(AyahCell.bottomMargin)
    }

}

//MARK: Setup
extension AyahCell {
    
    func configure(with model: AyahCellModel) {
        self.cellModel = model
        let number = "\(self.cellModel.ayahNumber)"
        self.arabicLabel.attributedText = self.cellModel.text
        self.numberLabel.text = number
    }
    
}

//MARK: Cell Size
extension AyahCell {
    
    /// Атрибуты для арабского текста
    static var arabicTextAtrributes: [NSAttributedString.Key : Any] {
        let paragraphStyle = NSMutableParagraphStyle()
        paragraphStyle.lineSpacing = 12
        paragraphStyle.alignment = .right
        paragraphStyle.lineBreakMode = .byWordWrapping
        
        let attributes: [NSAttributedString.Key : Any] = [
            .foregroundColor : Theme.current.textColor,
            .font: ArabicFont.current.quranTextFont,
            .paragraphStyle : paragraphStyle]
        return attributes
    }
    
    /// Расчет высоты для ячейки с текстом Корана
    static func calculateCellHeight(text: NSMutableAttributedString) -> CGFloat {
        let screenWidth = UIScreen.main.bounds.width
        let maxWidth: CGFloat =
            screenWidth - AyahCell.numberViewWidth - AyahCell.arabicLabelLeftMargin - AyahCell.leftMargin - AyahCell.rightMargin
        let height = (
            text.size(maxWidth: maxWidth).height + AyahCell.topMargin + AyahCell.bottomMargin).rounded(.up)
        return ceil(height)
    }
    
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant