bit*_*her 18 interface-builder xcode4 nslayoutconstraint
XCode 4.5中的Interface Builder尊重某些视图的intrinsicContentSize,例如NSButton,但我不能说服它在我自己的自定义子视图中尊重它.这会导致IB添加额外的约束,试图强制在IB中绘制布局,这会导致在运行程序时不使用内在大小.
例如,考虑一个以窗口为中心的按钮,以及一个以窗口为中心的自定义视图......


您可以看到自定义视图有四个约束,可能是因为IB不知道视图的intrinsicContentSize.您可以更改添加的额外约束,例如,您可以强制它为宽度和高度,但不能删除它们.
我现在通过搜索和删除awakeFromNib中的额外约束来处理这个问题,但必须有更好的方法来做到这一点.
rav*_*ron 28
在Interface Builder中设置占位符内在内容大小 - "猜测",如果你愿意的话.
这些约束在编译时被删除,这意味着它们对您正在运行的应用程序没有任何影响,并且布局引擎将在运行时添加适当的约束以尊重您的视图intrinsicContentSize.
Fat*_*tie 11
import UIKit
@IBDesignable class TagPerson: ShadowRoundedImageView {
override var intrinsicContentSize: CGSize {
var s = super.intrinsicContentSize
s.height = 40
s.width = 40
return s
}
override func prepareForInterfaceBuilder() {
invalidateIntrinsicContentSize()
}
}
Run Code Online (Sandbox Code Playgroud)
以上当然会在运行时完美地工作。但它随机无法在界面构建器中工作(即使是 11+)。
要使其循环,请尝试
通常的“刷新所有视图”
附加和删除一个无意义的约束到你的内在尺寸视图之一。(我注意到如果您有多个,对一个执行此操作通常足以使 Xcode 循环,然后它们都可以工作。)
最后:
Xcode 具有“固有大小占位符”功能。
选择一个或多个您的内在尺寸元素。来回切换奇怪的占位符几次。通常这会使其循环,然后视图将正常工作。
在最坏的情况下,用通常的清理一切重新启动 Xcode 有时会使其工作。
| 归档时间: |
|
| 查看次数: |
6651 次 |
| 最近记录: |