如何将 UILabel 的文本保存在安全区域内?
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
子类中覆盖此变量,以便在向 [= 添加约束时使其子视图可见12=]的安全区。但由于 UILabel
中的文本对安全区域没有限制,因此覆盖此变量没有任何意义。
相反,您需要重写 UILabel
的 textRect(forBounds:limitedToNumberOfLines:) 方法。
override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
return bounds.insetBy(dx: 10, dy: 10)
}
insetBy(dx:dy:)
方法 returns 左右内嵌来自 dx
,上下内嵌来自 dy
.
的矩形
我创建了一个自定义 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
子类中覆盖此变量,以便在向 [= 添加约束时使其子视图可见12=]的安全区。但由于 UILabel
中的文本对安全区域没有限制,因此覆盖此变量没有任何意义。
相反,您需要重写 UILabel
的 textRect(forBounds:limitedToNumberOfLines:) 方法。
override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
return bounds.insetBy(dx: 10, dy: 10)
}
insetBy(dx:dy:)
方法 returns 左右内嵌来自 dx
,上下内嵌来自 dy
.