iphone - UILabel sizeToFit 和约束

标签 iphone cocoa autolayout

是否有任何简单的方法可以帮助我使用内容大小动态更改依赖 View 的位置?

我想在列中显示多个 View ,这些 View 都有不同的内容。我希望它们被一个接一个地放置(我已经使用如下所示的约束创建了布局)

initial layout

但是每当我更改标签内容并调用 sizeToFit 时,系统似乎会忽略布局。

after size to fit call

目前我只对 height 属性感兴趣,我知道也可以使用约束矩形,过去我在 UIView 上编写了许多类别来动态更改大小(我想每个人都这样做)。但也许有一种我不知道的简单方法?

最佳答案

如果您使用自动布局,则不应调用

-sizeToFit。这是“旧”系统的一部分。

看起来 IB 已经在您的约束中插入了明确的高度(标签旁边的垂直条表明了这一点)。尝试选择标签并按 Cmd+= 清除它们。

对于多行标签,您还需要在 View Controller 中执行以下操作,以便在旋转/调整 View 大小时一切正常:

- (void)updateLabelPreferredMaxLayoutWidthToCurrentWidth:(UILabel *)label
{
    label.preferredMaxLayoutWidth =
        [label alignmentRectForFrame:label.frame].size.width;
}

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    [self updateLabelPreferredMaxLayoutWidthToCurrentWidth:self.label1];
    [self updateLabelPreferredMaxLayoutWidthToCurrentWidth:self.label2];
    [self updateLabelPreferredMaxLayoutWidthToCurrentWidth:self.label3];

    [self.view layoutSubviews];
}

多行标签暴露了自动布局的弱点之一。我们必须更新 preferredMaxLayoutWidth 以强制标签回流并调整其高度,否则如果 View 调整大小/旋转,自动布局不会意识到标签需要回流和调整大小。

关于iphone - UILabel sizeToFit 和约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927086/

相关文章:

Cocoa AES 加密 NSData 和 Bytearrays

iPhone 声音和延迟

iphone - YouTube 是否破坏了 iPhone 上嵌入的 IFrame?

ios - UITableView 单元格重叠

swift - 如何保证任何DispatchQueue(或OperationQueue)仅在异步任务的非主线程中运行?

ios - iOS自动布局动画不适用于iOS 7,但适用于iOS 8

iphone - UIWebView frame resize 不调整内部内容

xcode - Xcode 在哪里存储存档的框架?

ios - 如果使用自动布局,何时检查呈现的 viewController 是否属于类型

objective-c - 向我添加到 UIWindow 的 View 添加约束时出错?