• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UILabel 调整大小不起作用

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:34:04 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 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 中的框架,我应该在其他地方进行吗?

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



Best Answer-推荐答案


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

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

View 应该对它的高度/宽度有一些限制。如果您在 Xcode 中设置这些,请在 Controller 中为这些约束设置一个 IBOutlet 并更改 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap