Mis*_*cha 6 xcode ios autolayout today-extension
我在今天为我的应用程序创建的今日小部件中观察到一个非常奇怪的关于Autolayout的行为.试图找到问题的根源我最终创建了一个简单的新Xcode项目(单视图应用程序),并添加了一个今日扩展作为新目标 - 甚至没有触及它.
当我在我的设备(iPhone 6s)上启动Today Extension时,首先发生的是在控制台中抛出布局约束冲突:
2016-05-03 18:17:22.216 TodayExtension[10183:4611907] 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.
(
"<_UILayoutSupportConstraint:0x15c665320 V:[_UILayoutGuide:0x15c6657b0(0)]>",
"<_UILayoutSupportConstraint:0x15c663890 V:|-(0)-[_UILayoutGuide:0x15c6657b0] (Names: '|':UIView:0x15c6642a0 )>",
"<_UILayoutSupportConstraint:0x15c666010 V:[_UILayoutGuide:0x15c666380(0)]>",
"<_UILayoutSupportConstraint:0x15c666ed0 _UILayoutGuide:0x15c666380.bottom == UIView:0x15c6642a0.bottom>",
"<NSLayoutConstraint:0x15c666b80 V:[_UILayoutGuide:0x15c6657b0]-(NSSpace(8))-[UILabel:0x15c6617c0'Hello World']>",
"<NSLayoutConstraint:0x15c666bd0 V:[UILabel:0x15c6617c0'Hello World']-(NSSpace(8))-[_UILayoutGuide:0x15c666380]>",
"<NSLayoutConstraint:0x15c552820 'UIView-Encapsulated-Layout-Height' V:[UIView:0x15c6642a0(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x15c666bd0 V:[UILabel:0x15c6617c0'Hello World']-(NSSpace(8))-[_UILayoutGuide:0x15c666380]>
Run Code Online (Sandbox Code Playgroud)
您会注意到列表中的最后一个约束是UIView-Encapsulated-Layout-Height强制视图上的高度为0.我检查并确定引用的视图是小部件的根视图本身.因此,由于某种原因,我无法理解系统内部创建的0像素高度约束与Interface Builder中的视图设置冲突.(正如您在Xcode中创建一个全新的扩展时所看到的那样,除了一个UILabel,它固定在小部件根视图的每一侧.)
通常情况下我会声称这是一个巨大的iOS错误,但由于这是Apple 创建Today Widgets 的默认模板,我简直无法相信它已被打破.知道是什么导致了这种冲突的行为以及如何解决它(正确)?
...是要弄清楚是否有一种可靠的方法在今日小工具中使用Autolayout 而不会引入一些你不会在普通应用程序中使用的变通方法和" 脏黑客 ".(如果您最终添加了大量创建固定帧的约束并且不让内容动态增长而不是Autolayout的想法,是吗?)
密切相关的问题,这是问题的一部分,可能会提示:
不一致今天Widget行为打破了子视图的高度限制
小智 2
在 Apple 的某些股票UIView子类中,它们的实例化大小为零。您需要配置您的NSLayoutConstraints,以便它们能够对这个初始大小做出正确的反应。过去,我将顶部或底部约束设为不等式,以便其余约束可以正确调整自身大小,而不会破坏布局。
例如:将底部约束 ( <NSLayoutConstraint:0x15c666bd0 V:[UILabel:0x15c6617c0'Hello World']-(NSSpace(8))-[_UILayoutGuide:0x15c666380]>) aLessThanOrEqualTo设为constant的值8.0。
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |