gpt4 book ai didi

iphone - UILabel sizeToFit 和约束

转载 作者:行者123 更新时间:2023-12-03 16:02:49 33 4
gpt4 key购买 nike

是否有任何简单的方法可以帮助我使用内容大小动态更改依赖 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com