为了账号安全,请及时绑定邮箱和手机立即绑定

UILabel sizeToFit不适用于autolayout ios6

UILabel sizeToFit不适用于autolayout ios6

素胚勾勒不出你 2019-07-23 16:05:10
UILabel sizeToFit不适用于autolayout ios6我应该如何以编程方式(以及在哪种方法中)配置UILabel,其高度取决于其文本?我一直在尝试使用Storyboard和代码的组合进行设置,但无济于事。每个人都建议sizeToFit在设置lineBreakMode和numberOfLines。但是,不管我把代码viewDidLoad:,viewDidAppear:或者viewDidLayoutSubviews我不能让它开始工作。要么我的盒子太小而不能长文本也不会长,或者我把它做得太大而且不会缩小。
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

在大多数情况下,Matt的解决方案按预期工作。但如果它不适合你,请进一步阅读。

要使标签自动调整高度,您需要执行以下操作:

  1. 设置标签的布局约束

  2. 设置低优先级的高度约束。它应该低于ContentCompressionResistancePriority

  3. 设置numberOfLines = 0

  4. 将ContentHuggingPriority设置为高于label的高度优先级

  5. 为label选择preferredMaxLayoutWidth。标签使用该值来计算其高度

例如:

self.descriptionLabel = [[UILabel alloc] init];

self.descriptionLabel.numberOfLines = 0;

self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;

self.descriptionLabel.preferredMaxLayoutWidth = 200;


[self.descriptionLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];

[self.descriptionLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];

[self.descriptionLabel setTranslatesAutoresizingMaskIntoConstraints:NO];

[self addSubview:self.descriptionLabel];


NSArray* constrs = [NSLayoutConstraint constraintsWithVisualFormat:@"|-8-[descriptionLabel_]-8-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)];

[self addConstraints:constrs];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[descriptionLabel_]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];

[self.descriptionLabel addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[descriptionLabel_(220@300)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];


使用Interface Builder

  1. 设置四个约束。高度约束是强制性的。 

  2. 然后转到标签的属性检查器并将行数设置为0。 

  3. 转到标签的大小检查器并增加垂直ContentHuggingPriority和垂直ContentCompressionResistancePriority。

  4. 选择并编辑高度约束。

  5. 并降低高度约束优先级。

请享用。:)


查看完整回答
反对 回复 2019-07-23
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

在iOS 6中,使用自动布局,如果UILabel的边(或宽度)和顶部被固定,它将自动垂直增长和缩小以适合其内容,完全没有代码,也没有解除其抗压性等问题。这很简单。

在更复杂的情况下,只需设置标签即可preferredMaxLayoutWidth

无论哪种方式,正确的事情都会自动发生。


查看完整回答
反对 回复 2019-07-23
?
莫回无

TA贡献1865条经验 获得超7个赞

在IOS7中注意到sizeToFit也不起作用 - 也许解决方案也可能对你有所帮助

[textView sizeToFit];[textView layoutIfNeeded];


查看完整回答
反对 回复 2019-07-23
  • 3 回答
  • 0 关注
  • 813 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信