ios - UILabel 调整大小不起作用

标签 ios uiview resize uilabel frame

我有一个 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 中设置这些,请在 Controller 中设置 IBOutlet 以实现这些约束并更改 constant 属性。

如果您想以动画方式更改约束,则可以对要更改的约束进行更改,然后调用

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

调用layoutIfNeeded将导致自动布局约束被重新评估。在动画内部调用它将为更改后的约束设置动画。

从表面上看,您想要的是 UILabel 被限制为与 UIView 相同的高度/宽度,并且有一个 IBOutlet 用于对 UIView 进行高度限制。将该 IBOutlet 上的 constant 属性更改为所需的高度,然后从动画 block 内部调用 layoutIfNeeded

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

相关文章:

jquery - SimpleModal 调整容器大小

c# - 如何避免在具有透明背景的调整大小的 PNG 中出现无用的白色边框?

ios - 将字符串添加到 NSMutableAttributedString 时出错

ios - 按 int 值过滤 NSArray 和 NSDictionary

ios - 来自 GitHub 的项目的 Apple Mach-O 链接器错误

cocoa-touch - 当一个 ViewController 的 View 被另一个 View 和 UIViewController Containment 在 iOS5 中隐藏时,viewWillAppear 和 viewWillDisappear 回调

ios - 在自动布局中,如何将 "hide"设置为 UIView?

iphone - 你如何使 UIView 的幻灯片从左到右并在 iPhone 中相互对接?

ios - 以编程方式实例化 TableViewController 子类后,其导出为零

gtk - 如何使用户可以调整大小的 gtk.Box (VBox/HBox) 中的小部件