UIScrollView +中心视图+ Ambigous Scrollable内容大小+许多iPhone大小
我有:
- 应用程序,应该在横向和纵向模式下工作。
- 在顶部查看全尺寸滚动视图。
- 滚动视图内部的一些视图具有固定的宽度和高度。 (增加了H和W约束)
- 设置为在容器中以水平居中的方式查看滚动视图内部。 (根据约束添加)
我在界面构建器“有不明确的可滚动内容宽度”中发出警告。
我知道解决这个问题的唯一方法是设置尾随和前导约束。 但对于不同的iPhone(5.5“,4.7”,4“),我需要设置不同的尾随和前导约束。
如何消除此警告并且仍然具有针对所有iPhone尺寸的固定W和H的水平视图居中?
我创建Github repo来说明这个问题: ScrollViewAmbigous
这与UIScrollView Scrollable Content Size Ambiguity不重复,但它类似(虽然没有回答),但这个问题尤其与不同大小的iPhone有关。
早上喝了一杯新鲜的咖啡,我找到了解决这个问题的方法!
所以,这是最简单案例的初始状态:
- scrollView对所有边都有0个约束
- 按钮居中水平和垂直,固定宽度和高度
- 并且,当然
Has ambiguous scrollable content width
和Has ambiguous scrollable content height
恼人的警告 。
所有,我们要做的是:
- 添加2个附加约束,例如“0”表示视图的尾部和/或底部空间(在我的例子中 – UIButton)
重要提示:您必须添加尾随和/或底部约束。 不是“领先和顶级” – 它不起作用!
您可以在我的示例项目中检查它,演示如何解决此问题: ScrollViewAmbigous
PS
我不知道为什么它有效以及Xcode如何检测哪个约束更优先(因为我没有为这些约束明确设置优先级),但如果有人解释,为什么它在下面的评论中起作用,我会感激不尽。
问题 :
- 警告告诉我们,scrollview的内容大小取决于其子视图。
- 虽然您的子视图没有任何严格的位置和大小规则(没有固定的约束),但它会混淆nib生成的scrollview内容大小。
方案 :
- 仅将一个子视图作为scrollview的“contentView”。
-
向’contentView’添加严格(固定)约束。
最佳实践:滚动视图的宽度和高度相等。
- 将所有其他子视图和约束添加到“contentView”。
在这个问题上似乎有很多混乱。 我的看法是UIScrollView必须有两个尾随空间约束,一个’内部’连接它的一个子视图(因此它可以知道它的内容宽度),另一个’外部’连接它到兄弟或超级视图所以它知道它的框架宽度。
同样的原则适用于高度,即两个底部空间约束。
- MVVMCross iOS:当切换到不同的View模型时,如何将自定义转换绑定命令
- 如何解决** mach_vm_map(size = 8388608)失败(错误代码= 3)***错误:无法分配区域错误
- 代码签名资源规则path在Jenkins CODE_SIGN_RESOURCE_RULES_PATH上失败
- MFMailComposeViewController的替代品?
- iAd横幅视图委托不调用方法
- UIImagePickerController被解散时,只在iOS 6.0中将视图推到20像素
- 为什么UISwitch onImage / offImage属性不适用于iOS 7?
- 苹果Mach-O链接器错误在XCode 6.0.1
- 如何正确添加这三个文件?“Default.png,Default-568h@2x.png,Default@2x.png”适用于iPhone / iPad的通用应用程序吗?