IOS/Objective-C: MakeUILabel 使用自动布局流向多行
Posted
技术标签:
【中文标题】IOS/Objective-C: MakeUILabel 使用自动布局流向多行【英文标题】:IOS/Objective-C: MakeUILabel Flow to Multiple Lines with Autolayout 【发布时间】:2018-03-22 17:02:05 【问题描述】:我正在尝试让 UILabel 流向多行并使用自动布局将其下方的元素向下推。
这是我在 viewwillappear 中调用的代码。
self.myLabel.numberOfLines = 0;
self.myLabel.lineBreakMode = NSLineBreakByWordWrapping;
[_myLabel setContentCompressionResistancePriority:1000
forAxis:UILayoutConstraintAxisVertical];
[self.myLabel setNeedsDisplay];
[self.myLabel layoutIfNeeded];
[self.view setNeedsDisplay];
[self.view layoutIfNeeded];
UILabel 被限制在内容视图的顶部,而它下方的图像被限制在 UILabel 的底部。该标签还具有 >=21 的高度限制。
在初始加载时,标签只显示一行。
奇怪的是,在启动模态 VC 并关闭它后,标签确实转到多行,但未能将其下方的元素下推。
在初始加载时。
启动和取消模态VC后
我想知道问题是否与布置子视图的时间有关,但我几乎尝试了所有事情。
提前感谢您的任何建议。
【问题讨论】:
如何在界面生成器中设置 .lines 您的限制是什么?您是否将所有视图都设置为限制在主视图的顶部,或者它们是否限制在 UILabel 的底部?你有没有调试过视图层次结构? 标签如何约束在x轴上? IB 中的行数为 0。大约有 40 个约束。标签顶部被限制为超级视图。然后垂直的将所有内容链接到它上面的元素。底部元素被限制在超级视图的底部。它的优先级为 250,因此可以调整。在 x 轴上,标签受前导和尾随的限制。 我终于找到了一个解决方案,虽然不是一个优雅的解决方案:在 didLayoutSubviews 中手动调整大小。我为高度约束创建了一个实例变量,并在 viewdidlayoutsubviews 中设置: CGSize labelSize = [self.myLabel sizeThatFits:CGSizeMake(self.myLabel.frame.size.width, FLT_MAX)];浮动标签高度=标签大小.高度; _myLabelHeight.constant=labelHeight; 【参考方案1】:简单示例:
创建一个新的 ViewController。 添加一个按钮,从顶部限制 40 点并水平居中 添加 UIView(绿色视图)。限制水平居中,宽度为 240,顶部空间为 20。 为绿色视图添加两个标签。 顶部标签,行数 = 0,前导和尾随约束 16,顶部约束 8(到绿色超级视图) 底部标签,水平居中,顶部空间到顶部标签 8,底部约束 8(到绿色超级视图)。 将 Top 标签连接到视图控制器中的@IBOutlet var multiLineLabel: UILabel!
。
将按钮 touch-up-inside 连接到视图控制器中的 @IBAction func didTap(_ sender: Any)
函数。
优先级没有变化。
运行应用程序。每次点击按钮都会将文本添加到顶部/多行标签,它会“下推”底部标签,进而“下推”绿色视图的底部边缘。
class ExpandingLabelViewController: UIViewController
@IBOutlet var multiLineLabel: UILabel!
@IBAction func didTap(_ sender: Any)
if let s = multiLineLabel.text
multiLineLabel.text = s + " Here is some more text."
一旦你完成了这项工作,你就可以将其他元素添加到视图中。只要确保你有一个垂直间距约束的“链”,最顶部的元素被限制在绿色超级视图的顶部,最底部的元素被限制在绿色超级视图的底部。
【讨论】:
您的示例有效。就我而言,我将重做所有约束,因为某处出了差错。以上是关于IOS/Objective-C: MakeUILabel 使用自动布局流向多行的主要内容,如果未能解决你的问题,请参考以下文章
IOS/Objective-C:从 NSManagedObject 构建 NSDictionary
iOS/Objective-C:有啥方法可以查看安排了哪些 localNotifications? [复制]