swift - 如何将 UILabel 的文本保留在 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
但是由于 text inUILabel
对 Safe Area 没有约束,因此覆盖此变量没有任何意义。
相反,您需要覆盖textRect(forBounds:limitedToNumberOfLines:)的方法UILabel
。
override func textRect(forBounds bounds: CGRect, limitedToNumberOfLines numberOfLines: Int) -> CGRect {
return bounds.insetBy(dx: 10, dy: 10)
}
insetBy(dx:dy:)
方法返回具有左右插图 fromdx
和顶部和底部插图 from的矩形dy
。
推荐阅读
- javascript - 使用 d3-tip.js 在 d3 和 Leaflet.js 地图上显示弹出窗口,但无法在该弹出窗口中显示相关标记数据
- scala - 如何在给定 ZonedDateTime 的情况下计算下一分钟和接下来 5 分钟的间隔
- reactjs - React App 无法运行 - 意外运行 npm add -syntax error: 'import' and 'export'
- xamarin - 滑动触发调用事件的偏移量是多少?
- reactjs - 动态设置默认状态 + onMouseEnter
- laravel - 同一域下多个 Laravel 8 站点之间的用户和会话共享
- php - 使用 PHP 计算两个 8 位日期之间的天数的简单语句?
- psql - 错误:连接到套接字“/tmp/.s.PGSQL.5432”上的服务器失败
- javascript - 使用另一个js文件的Javascript Unerror方法
- python - 更改组合问题:我找到了这段代码,但我无法理解某些行