iOS:Auto Layout中的多行UILabel
主要思想是每个视图都应该声明它的“首选”(固有)大小,以便AutoLayout知道如何正确显示它。 UILabel只是一个示例,其中一个视图无法自己知道需要什么大小进行显示。 它取决于提供的宽度。
正如mwhuss所指出的那样,setPreferredMaxLayoutWidth使标签跨越多行。 但这不是主要问题。 问题是我在何时何地获取此值,并将其作为参数发送到setPreferredMaxLayoutWidth。
我设法做出了看起来合法的东西,请纠正我是否有任何错误,并告诉我是否有更好的方法。
在UIView的
-(CGSize) intrinsicContentSize
我根据self.frame.width为我的UILabel设置了setPreferredMaxLayoutWidth。
UIViewController的
-(void) viewDidLayoutSubviews
这是我知道的第一个回调方法,可以指定主视图中子视图在屏幕上所占用的确切框架。在该方法内部,我会对子视图进行操作,使其固有大小失效,以便根据指定的宽度将UILabel拆分为多行。请注意保留HTML标签。
UILabel
。 - nevan kingmyLabel.frame.size.width
为零。在iOS 7上,“viewDidLayoutSubviews”被调用了三次(首先是零,然后是正确的框架值) - 在iOS 8上只调用一次。现在我使用了‘self.view.bounds.size.width’,现在它正常工作了。 - testingUILabel
对我也很有用。现在它适用于iOS 7和iOS 8。 - testing