2017-10-19 165 views
-1

创建视图无法同时满足约束条件时,图幅为零

init(){ 
    super.init(frame: .zero) 
} 

创建视图我想设置我的子视图

func setViews(){ 
    self.addSubview(labelView) 
    self.addConstraintsWithFormat("V:|-10-[v0]-10-|", views: labelView) 
    self.addConstraintsWithFormat("H:|-10-[v0]-10-|", views: labelView) 
} 

一切正常后,但我已经警告说,

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:0x7f87ea8e6520 V:|-(10)-[BIPartners.labelView:0x7f87eb56be20] (Names: '|':BIPartners.labelView:0x7f87eb56a320)>", 
     "<NSLayoutConstraint:0x7f87ea8e6af0 V:[BIPartners.labelView:0x7f87eb56be20]-(10)-| (Names: '|':BIPartners.labelView:0x7f87eb56a320)>", 
     "<NSLayoutConstraint:0x7f87e868bdc0 '_UITemporaryLayoutHeight' V:[BIPartners.labelView:0x7f87eb56a320(0)]>" 
    ) 

我知道这个问题是当我将帧设置为零。我将帧设置为零,并将垂直边距设置为10.我应该如何解决此问题?

+0

你和VFL结婚了吗?在堆栈视图或其他内容中执行此操作可能会更容易,并隐藏/取消隐藏所需的元素,这样您就不会对约束进行记录。 – Adrian

回答

0

你应该通过降低标签的底部钉扎约束的优先级,东西不到1000解决这个问题:

self.addConstraintsWithFormat("V:|-10-[v0]-10(@750)-|", views: labelView)

这将消除歧义的约束,保护您的底部填充和的真正高度标签。

基本上,当您要使用固有内容大小并且标签固定在两侧时,就会出现这种歧义。

当然,还有其他方法可以获得所需的间距(边距),但这个答案与您正在尝试做的最接近。

+0

是的,你解决了我的问题!正确的方法是赖特“V:| - (10 @ 750) - [v0] - (10 @ 750) - |和相同的东西水平对齐 –

0

使用WTF Auto Layout了解您的错误。

在设置约束之前检查视图的bounds。如果它等于CGRect.zero,则不应用约束。

+0

我认为的界限总是为零。创建视图时,我不给框架大小。所有观点都基于constraitns!谢谢你, –

相关问题