我正在开发一个具有暂停按钮的应用程序,该按钮具有自动版式的大小。有时这会导致在drawRect中调用rect的正确大小,有时是{{0.0},{22,22}}(其他任何情况下)都只会导致很小的“暂停”按钮。
- (void)drawRect:(CGRect)rect
{
NSLog(@"%@", NSStringFromCGRect(rect));
// Everything here follows the size of the rect to draw
}
22px似乎是随机的,因为该值未出现在应用程序中的任何地方。它使我想起的唯一一件事是,我在drawRect内绘制的内容使用了10px的插入量(只需将x和y坐标,宽度和高度设置为UIButton上的其他值),因此42px-2 * 10px将为22px。
我在IB中设置了约束,如下所示:
以下仿真器(Xcode 5.1.1)/硬件设备起作用,因为它们为我提供了按比例缩放的输出,或者在输出为22px时不起作用:
该按钮在IB中为42px。
可以的时候,这些是约束条件:
po ((UIView*)self.pauseButton).constraints
<__NSArrayM 0x972e160>(
<NSLayoutConstraint:0x979ca10 V:[PauseButton:0x979c6d0(63)]>,
<NSLayoutConstraint:0x979ca40 H:[PauseButton:0x979c6d0(63)]>,
<NSContentSizeLayoutConstraint:0x961f4a0 H:[PauseButton:0x979c6d0(30)] Hug:250 CompressionResistance:750>,
<NSContentSizeLayoutConstraint:0x961f5f0 V:[PauseButton:0x979c6d0(33)] Hug:250 CompressionResistance:750>
布局失败时的同一点(这通常会引发真正的怪异错误):
po [self.pauseButton constraints]
<__NSArrayM 0x7f59920>(
<NSLayoutConstraint:0x7f6f980 V:[PauseButton:0x7f6f720(22)]>,
<NSLayoutConstraint:0x7f6f9c0 H:[PauseButton:0x7f6f720(22)]>,
<NSContentSizeLayoutConstraint:0x7f6f360 V:[PauseButton:0x7f6f720(22)] Hug:250 CompressionResistance:750>
)
po [[UIWindow keyWindow] _autolayoutTrace]两者都是相同的,类似于一个空的VC,其中您在Window上获得了AMBIGUOUS LAYOUT,并获得了两个LayoutGuide:
*<UIWindow:0x108f537f0> - AMBIGUOUS LAYOUT
| *<UIView:0x109409850>
| | *<_UILayoutGuide:0x109409c10> - AMBIGUOUS LAYOUT
| | *<_UILayoutGuide:0x10940a540> - AMBIGUOUS LAYOUT
其余的都还可以。
我不知道神奇的22px约束来自何处,或者为什么它仅在某些情况下出现。
我只是通过以下步骤对其进行了修复:
现在最让我担心的部分是,当我没有从设备中删除应用程序时,即使我已经从IB中完全删除PauseButton来运行它,但在ViewController上仍然有IBOutlet时,它仍然会像这样显示22px约束还在那儿。
仅在再次添加它并从设备中删除该应用程序后,它才放弃了这些幻像约束。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句