以下问题是这个问题的延续:
主要思想是每个视图都应该声明它的“首选”(固有)大小,以便 AutoLayout 可以知道如何正确显示它。UILabel 只是视图本身无法知道其显示所需大小的情况的一个示例。这取决于提供的宽度。
正如mwhuss 所指出的,setPreferredMaxLayoutWidth做到了使标签跨越多行的技巧。但这不是这里的主要问题。问题是我在何时何地获得这个作为参数发送给setPreferredMaxLayoutWidth的宽度值。
我设法做出了一些看起来合法的东西,所以如果我有任何错误,请纠正我,如果你知道更好的方法,请告诉我。
在 UIView 的
-(CGSize) intrinsicContentSize
我根据self.frame.width为我的UILabels设置了PreferredMaxLayoutWidth 。
UIViewController 的
-(void) viewDidLayoutSubviews
是我知道的第一个回调方法,主视图的子视图在哪里指定了它们在屏幕上的确切帧。然后,从该方法内部,我对我的子视图进行操作,使它们的固有大小无效,以便 UILabel 根据指定给它们的宽度分成多行。