gpt4 book ai didi

ios - UILabel 调整大小不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:43:54 24 4
gpt4 key购买 nike

我有一个 UIVIew,里面有一个 UILabel,我希望 UILabel 和 UIView 包装文本内容大小。所以我计算了文本大小,并将 UIView 的框架和 UIlabel 的框架设置为新的高度。UIView 的大小得到了完美的调整,但 UILabel 的大小没有得到调整。始终保持相同的大小。不知道为什么

这是我的代码:

[mylabel setNumberOfLines:0];
CGSize maximumLabelSize = CGSizeMake(mylabel.frame.size.width, 160);
CGSize expectedLabelSize = [text sizeWithFont:mylabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:mylabel.lineBreakMode];
CGRect newFrame = mylabel.frame;
newFrame.size.height = expectedLabelSize.height;
mylabel.frame = newFrame;
mylabel.text = text;

myView.frame = CGRectMake(myView.frame.origin.x,
myView.frame.origin.y,
myView.frame.size.width,
newFrame.size.height);

PD:我正在更改 viewDidLayoutSubviews 中的框架,我应该在其他地方进行吗?

更新:我正在使用带有一些限制的自动版式。我需要自动布局,因为我有一个基于导航栏和标签栏的应用程序。

最佳答案

如果您使用自动布局,布局约束将决定 View 的大小 - 不建议您使用自动布局并更改 View 框架,因为结果并不总是可预测的。

如果您只希望 UILabel 的大小与 UIView 的大小相同,请确保 UILabel 的高度和宽度约束与 UIView 相同。UILabels 有一个固有的大小(标签“应该”的大小)。除非另有限制,否则标签将始终尝试成为其固有大小。

View 应该对其高度/宽度有一些限制。如果您在 Xcode 中设置这些,请将 IBOutlet 设置到您的 Controller 中以用于这些约束并更改 constant 属性。

如果您想为约束的变化设置动画,那么您可以对您想要更改的约束进行更改,然后调用

[UIView animateWithDuration:.5f animations:^{
[self.view layoutIfNeeded];
}];

调用 layoutIfNeeded 将导致重新评估自动布局约束。在动画内部调用它将使更改的约束动画化。

从外观上看,您想要的是将 UILabel 约束为与 UIView 相同的高度/宽度,并为 UIView 的高度约束设置一个 IBOutlet。将该 IBOutlet 上的 constant 属性更改为所需的高度,然后从动画 block 内部调用 layoutIfNeeded

关于ios - UILabel 调整大小不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21919275/

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