UIScrollView不使用自动布局约束

我有一个滚动视图和背后的图像视图,我用笔尖填充它。 我正在使用自动布局。 我有一个底部空间,超级查看和顶部空间来超级查看这两个意见。 图像视图正是我想要的。 对于iPhone 5,这是我想要的地方。 而对于其他的iPhone,它保持在屏幕的底部,所以它调整正确。 滚动视图看起来就在iphone 5上,但在其他手机上它没有被resize,所以它滚动下面的应用程序的视图。 我在日志中得到这些消息:

2012-11-21 10:42:38.576 LCHApp[12604:907] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) "<NSLayoutConstraint:0x1d8ea080 UIScrollView:0x1d8413b0.bottom == UIImageView:0x1d892110.bottom>", "<NSAutoresizingMaskLayoutConstraint:0x1d8cca10 h=-&- v=-&- ScheduleViewNib:0x1d853630.height == UIScrollView:0x1d8413b0.height - 386>", "<NSLayoutConstraint:0x1d8e5340 V:[UIImageView:0x1d892110]-(64)-| (Names: '|':ScheduleView:0x1d8efc30 )>", "<NSAutoresizingMaskLayoutConstraint:0x1d8cf520 h=--& v=--& V:[ScheduleView:0x1d8efc30(480)]>", "<NSLayoutConstraint:0x1d8eaed0 V:|-(45)-[UIScrollView:0x1d8413b0] (Names: '|':ScheduleView:0x1d8efc30 )>" Will attempt to recover by breaking constraint <NSLayoutConstraint:0x1d8ea080 UIScrollView:0x1d8413b0.bottom == UIImageView:0x1d892110.bottom> 

我已经尝试过了

 [self setTranslatesAutoresizingMaskIntoConstraints:YES]; 

 [self.myScrollView setTranslatesAutoresizingMaskIntoConstraints:YES]; 

从我所看到的情况来看,这只是消除了所有观点的限制。 而不是我想要的。

UIScrollView和自动布局的关系不同于自动布局的其他方面。 基本上,如果允许简单的自动布局操作,则不会滚动。 例如,如果滚动视图的子视图以正常方式被固定为从滚动视图顶部的10个点,那么它将被绝对固定在那里; 无论滚动视图如何滚动,它都不会移动。

为了解决这个问题,使用自动布局的UIScrollView以全新的方式运行。 因此,当你说“我正在使用自动布局”时,你必须准备好与以前完全不同的操作。 你必须使用translatesAutoresizingMaskIntoConstraints = YES和一个明确的内容大小的单个滚动视图子视图,否则一切都必须translatesAutoresizingMaskIntoConstraints = NO ,内容的大小将隐式推断基于子视图的约束。

这在https://developer.apple.com/library/content/releasenotes/General/RN-iOSSDK-6_0/index.html中有很好的解释;

使用自动布局时非常重要:必须将最后一个子视图的右侧和/或底部固定在滚动视图的右侧和/或底部。 这是滚动视图如何知道内容大小。 例如:

 [scrollView addConstraint:[NSLayoutConstraint constraintWithItem:lastSubView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeRight multiplier:1.0 constant:0]]; 

感谢这个网站提供了一个完美的例子。

我因此而失去了几个小时,而且我希望能够让别人省去我的痛苦。

为了使UIScrollviews能够很好的工作,我使用这个方法。 在这个答案中,我解决了如何获得垂直滚动滚动视图的工作,这也适用于设备旋转。 您也可以调整方法来使用水平滚动滚动视图。 对于双向滚动的滚动视图, 请不要添加大小匹配宽度限制技巧。 但一切都是一样的。

几件事情。

  1. 确保自动布局已打开(“文件检查器选项卡”上的IB)
  2. 确保你没有做任何涉及边界,框架等的改变 – 现在全部都是通过自动约束来完成的
  3. 确保远离AutoResizingMask。 这将与您的新设置竞争。 如果这样做是正确的,你现在可以布置你的button,它会很好的工作。 就是这样。

这个错误是指出你的笔尖或者那个笔尖内的控件没有使用自动布局。