ios - 当没有足够的空间来使用自动布局显示全文时隐藏 UILabel

标签 ios cocoa-touch autolayout

我有一个水平堆栈 View ,从左到右包含三个控件:一个自定义 UIView 子类(具有固有内容大小)和两个 UILabel。两个标签都配置如下:

label.numberOfLines = 1
label.adjustsFontSizeToFitWidth = false
label.adjustsFontForContentSizeCategory = true

我将堆栈 View 分布设置为 .fill 以及三个控件的内容拥抱优先级和内容压缩阻力优先级,以便自定义 View 和第一个标签的框架拥抱内容,第二个标签拉伸(stretch)来填补剩余的空间。它看起来像这样:

|[custom view][label 1][label 2     ]|

当我将系统文本大小调整得更大,以至于没有足够的水平空间来显示两个标签的全文时,我的问题就出现了。我不想用“...”截断第一个标签的文本,而是希望在没有足够空间显示全文时将其完全隐藏。有什么方法可以使用自动布局来做到这一点吗?

感觉好像应该有一种方法可以使用 width = 0 约束来做到这一点,并且优先级围绕压缩阻力优先级仔细校准,但我无法完全理解如何做到这一点。

最佳答案

所以最终我没能找到使用自动布局来完成此操作的方法。据我所知,AL 不允许您使用低优先级约束来定义回退布局。相反,低优先级约束的存在是为了阐明当必需的和高优先级的约束留有额外余地时应该如何布局。

相反,我意识到这作为 label 的行为更有意义,因为 UILabel 已经实现了一些文本不适合时的行为:它可以以各种方式缩小字体、剪辑或截断。因此,将 UILabel 子类化并在其中添加行为是有意义的。这是代码:

class HidingLabel: UILabel {
    override func layoutSubviews() {
        super.layoutSubviews()

        if bounds.size.width < intrinsicContentSize.width {
            frame = CGRect.zero
        }
    }
}

关于ios - 当没有足够的空间来使用自动布局显示全文时隐藏 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44910581/

相关文章:

iphone - UIView drawRect 与 initWithFrame

ios - 专门针对纵向 3.5 英寸 (iPhone 4S) Xcode 6 的尺寸等级?

xcode - 使用十六进制代码查找约束

ios - Xcode 自动布局 - 动态约束

ios - NSrange 在这里如何工作?

ios - 在 iOS 项目中开始使用 parse.com 的 PFLogInViewController 和 PFSignUpViewController 后出现链接器错误

ios - 当我将 [<object> description] 作为参数传递时,自定义 NSLog 生成错误

ios - VC 用 UISlider 更改 VC2 上的文本字段

ios - UILabel 的闪烁效果

swift - 如何更改 UITableView 部分边框?