Sen*_*ful 4 interface-builder uiview nib autolayout xcode6
从nib文件加载UIView时,视图通常translatesAutoresizingMastIntoConstraints设置为YES.
因此,您无法向视图添加顶级约束(例如宽度和高度).
在过去,我已经能够生成一个顶级视图,它允许我创建顶级约束,并设置translatesAutoresizingMastIntoConstraints为NO.
如何从笔尖加载UIView而不进行子类化时,我怎么能得到这种行为?
更新:虽然您可以创建可约束的视图,但我不推荐它,因为很难区分这两者.如果您需要修改或重新创建视图,您可能会忘记它是一个可约束的视图并意外地重新创建静态视图.因此,我建议您将顶级视图保留为静态视图,并在从笔尖创建它们后手动更新它们:
let view = UINib(nibName: "ABCView", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! UIView
view.translatesAutoresizingMaskIntoConstraints = false
Run Code Online (Sandbox Code Playgroud)
如果视图需要内部内容大小,可以覆盖intrinsicContentSize,或者通过nib文件定义其宽度和/或高度,只需添加固定到顶级视图(即静态视图)顶部的"大小调整"子视图,底部,尾部和前导约束,并具有宽度和/或高度约束.
这似乎是一个未记录的Xcode功能(在Xcode 6和Xcode 7.1上测试).
我将使用以下术语:
translatesAutoresizingMaskIntoConstraints设置为YES.translatesAutoresizingMaskIntoConstraints设置为NO.首先让我们来看看他们的一些差异......
.xib内容:
<view contentMode="scaleToFill" id="bU6-qJ-x7d" userLabel="STATIC">
<rect key="frame" x="0.0" y="0.0" width="320" height="439"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="687" y="37.5"/>
</view>
Run Code Online (Sandbox Code Playgroud)
更多信息:
<UIView: 0x7fec19ccb1b0; frame = (0 0; 320 439); autoresize = W+H; layer = <CALayer: 0x7fec19ccae80>>.xib内容:
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0G6-nE-8IZ" userLabel="CONSTRAINABLE">
<rect key="frame" x="0.0" y="0.0" width="320" height="439"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="687" y="-455.5"/>
</view>
Run Code Online (Sandbox Code Playgroud)
更多信息:
<UIView: 0x7f9503eb2ba0; frame = (0 0; 320 439); autoresize = RM+BM; layer = <CALayer: 0x7f9503e9dc80>><autoresizingMask ...元素.