为什么需要preferredMaxLayoutWidth?
preferredMaxLayoutWidth
多行标签的首选最大宽度(以磅为单位).
应用布局约束时,此属性会影响标签的大小.在布局期间,如果文本超出此属性指定的宽度,则附加文本将流向一个或多个新行,从而增加标签的高度.
注意这个:
如果文本超出此属性指定的宽度,则附加文本将流向一个或多个新行
因此,一个多标签上,如果preferredMaxLayoutWidth没有设置属性,将文本只是去超越bounds的UILabel?
为什么我们希望在我们明确设置为多线的标签上发生这种情况?
这个属性存在的真正原因是什么?它是自动布局的东西吗?请解释一下,我真的很想了解这一点.
通过在layoutSubviews中计算和设置框架,查看A的子视图.
视图B使用约束来布局它的子视图.
视图A包含许多View B实例.
视图A在布局它们时需要知道其子视图的大小,因此它会调用sizeThatFits:它们.
视图B的高度取决于它的宽度.在我的例子中,它UILabel内部有一条多线.
B应该如何实现它,sizeThatFits:以便在size传递给参数sizeThatFits:和约束的情况下返回正确的大小?
到目前为止我尝试/考虑的内容:
systemLayoutSizeFittingSize: - 不起作用,因为它没有考虑传递给它的确切大小.它不能用于指定精确的宽度,例如,当水平收缩时垂直生长的视图.它只提供最大压缩尺寸或最大尺寸.
intrinsicContentSize- 据我所知,这用于将信息传递给自动布局.我们想要的是从 Auto Layout 获取信息.
到目前为止,这就是我的理由.如果我犯了错误,请纠正我.请帮助我,如果有人能指出我是如何完成的,我将非常感激!
编辑:此外,也许有一些完全不同的方式来做到这一点,甚至没有使用sizeThatFits:?我唯一的要求是我可以在"外部"视图(视图A)中继续使用框架布局,在"内部视图"(视图B)中继续使用自动布局.
edit2:添加了一张图片来说明我必须解决的确切情况
edit3:忘了提,我需要支持iOS 7.0
何时以及为何调用 updateConstraints?当覆盖时,需要在覆盖中完成哪些工作?
我已经阅读并观看了很多有关自动布局如何工作的信息,但我似乎无法完全理解它。
您是否会更新保存引用的任何特殊兴趣约束的常量,或者进行自定义,是否从视图中删除所有约束并完全重新创建它们,就像 WWDC 视频中的一个人所做的那样?
为什么以下代码在iPhone模拟器和设备上的行为有所不同?我在intel macbook pro上运行模拟器,该设备是iPhone 5(型号MD297KS/A).
码:
uint8_t original = 23;
uint8_t * pointerToOriginal = &original;
uint32_t * casted = (uint32_t *)pointerToOriginal;
printf("original: %u\ncasted: %u\n", original, *casted);
Run Code Online (Sandbox Code Playgroud)
在模拟器上运行时的输出:
original: 23
casted: 23
Run Code Online (Sandbox Code Playgroud)
在设备上运行时的输出:
original: 23
casted: 2755278871
Run Code Online (Sandbox Code Playgroud)
我假设转换会导致垃圾数据包含在转换整数中,因此设备输出对我有意义,但为什么整数不受模拟器中转换中引入的额外数据的影响?