jjo*_*son 3 cocoa-touch ios autolayout
我有一个水平堆栈视图,从左到右都有三个控件:一个自定义UIView子类(具有固有的内容大小)和两个UILabel。两个标签的配置如下:
label.numberOfLines = 1
label.adjustsFontSizeToFitWidth = false
label.adjustsFontForContentSizeCategory = true
Run Code Online (Sandbox Code Playgroud)
我将堆栈视图分布设置.fill为,三个控件的内容优先级和内容压缩优先级设置为,以便自定义视图和第一个标签的框架拥抱内容,第二个标签拉伸以填充剩余空间。看起来像这样:
|[custom view][label 1][label 2 ]|
Run Code Online (Sandbox Code Playgroud)
当我将系统文本大小调整为较大以致没有足够的水平空间来显示两个标签的全文时,就会出现我的问题。我希望在没有足够的空间显示全文时将其完全隐藏,而不是将第一个标签的文本截断为“ ...”。有什么办法可以通过自动布局来做到这一点?
感觉似乎应该有一种方法,可以使用宽度= 0约束来进行此操作,并在压缩阻力优先级周围仔细校准优先级,但是我无法完全理解如何做。
因此,最终我无法找到一种使用“自动布局”的方法。据我所知,AL不允许您使用低优先级约束来定义后备布局。相反,存在低优先级约束条件以阐明当所需约束条件和较高优先级约束条件有更多余地时,应如何布置事物。
相反,我意识到这对于label的行为更有意义,因为UILabel当文本不合适时,它已经实现了许多行为:它可以以各种方式收缩字体,剪辑或截断。因此,有必要子类化UILabel并在其中添加行为。这是代码:
class HidingLabel: UILabel {
override func layoutSubviews() {
super.layoutSubviews()
if bounds.size.width < intrinsicContentSize.width {
frame = CGRect.zero
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |