Как сохранить текст UILabel внутри safeArea? - PullRequest
0 голосов
/ 05 ноября 2018

Я создал пользовательскую метку UILabel, чтобы иметь возможность изменить свою безопасную область, чтобы текст мог иметь некоторые отступы и выглядеть лучше, но после того, как я изменил свою безопасную область, текст все еще проходит весь путь от края до края, и нет дополнения добавил вот мой код

class customLabel: UILabel {

    override init(frame: CGRect) {
        super.init(frame: frame)
        setUp()

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }



    override var safeAreaInsets: UIEdgeInsets {
        return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
    }


    func setUp(){
        lineBreakMode = NSLineBreakMode.byWordWrapping
        numberOfLines = 0
        textColor = UIColor.white
        textAlignment = .center
        layer.cornerRadius = 8
        clipsToBounds = true
        backgroundColor = UIColor.black.withAlphaComponent(0.7)
        font = UIFont.boldSystemFont(ofSize: 20)
        translatesAutoresizingMaskIntoConstraints = false

    }

}

как сохранить текст внутри нового safeAreaInset?

спасибо!

1 Ответ

0 голосов
/ 05 ноября 2018

safeAreaInsets не должен использоваться для заполнения текста. Безопасная область была добавлена ​​для предотвращения покрытия содержимого UIView панелями навигации, панелями вкладок, панелями инструментов и т. Д. Таким образом, вы можете переопределить эту переменную в подклассах UIView, чтобы сделать ее подпредставления видимыми при добавлении ограничений в UIView Safe. Площадь. Но поскольку текст в UILabel не имеет ограничений для безопасной области, переопределение этой переменной не имеет смысла.

Вместо этого вам нужно переопределить textRect (forBounds: limitedToNumberOfLines:) метод UILabel.

override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
    return bounds.insetBy(dx: 10, dy: 10)
}

insetBy(dx:dy:) метод возвращает прямоугольник с левыми и правыми вставками из dx и верхними и нижними вставками из dy.

...