繁体   English   中英

如何将UILabel的文本保留在safeArea中?

[英]How to keep the text of a UILabel inside the safeArea?

我创建了一个自定义UILabel,以便能够更改其安全区域,以便文本可以有一些填充并看起来更好,但是在更改safeArea之后,文本仍然从边缘到边缘一直沿途前进,并且此处未添加填充我的代码

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中?

谢谢!

safeAreaInsets不应用于文本填充。 添加了安全区域,以防止导航栏,选项卡栏,工具栏等覆盖UIView的内容。因此,当您向UIView的安全区域添加约束时,可以在UIView子类中覆盖此变量,以使其在子视图中可见。 但是由于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 ,顶部和底部的插图来自dy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM