ios – 默认今日小部件中的布局约束冲突
我在今天为我的应用程序创建的今日小部件中观察到一个非常奇怪的关于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]> 你会注意到列表中最后一个约束是UIView-Encapsulated-Layout-Height,它强制视图的高度为0.我检查并确定引用的视图是小部件的根视图本身.因此,由于某种原因,我无法理解系统内部创建的0像素高度约束与Interface Builder中的视图设置冲突. (正如您在Xcode中创建一个全新的扩展时所看到的那样,除了一个UILabel固定在小部件根视图的每一侧之外,什么也没有.) 通常情况下我会声称这是一个巨大的iOS错误,但由于这是Apple创建Today Widgets的默认模板,我简直无法相信它已被打破.知道是什么导致了这种冲突的行为以及如何解决它(正确)? 我基本上试图用赏金来实现… …是要弄清楚是否有一种可靠的方法在今日小工具中使用Autolayout而不会引入一些你不会在普通应用程序中使用的变通方法和“脏黑客”. (如果您最终添加了大量创建固定帧的约束并且不让内容动态增长而不是Autolayout的想法,是吗?) 密切相关的问题,这是问题的一部分,可能会提示: 解决方法
在Apple的一些股票UIView子类中,它们的实例化大小为零.您需要配置NSLayoutConstraints,以便它们能够正确地响应此初始大小.在过去,我已将顶部或底部约束设为不等式,以便其余约束可以正确调整自身大小而不会破坏布局.
例如:使你的底部约束(< NSLayoutConstraint:0x15c666bd0 V:[UILabel:0x15c6617c0'Hello World'] - (NSSpace(8)) - [_ UILayoutGuide:0x15c666380]>)LessThanOrEqualTo,其常量值为8.0. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |