Swift编程约束下边距不起作用

Posted

技术标签:

【中文标题】Swift编程约束下边距不起作用【英文标题】:Swift programatic constraints bottom margin not working 【发布时间】:2015-03-25 10:40:37 【问题描述】:

我正在尝试在 uiview 的下边距和滚动视图的下边距之间设置程序约束。但是,xcode 给了我一些错误,并且文本看起来不合适,有时它根本不会出现

所以基本上我有一个大小为 400 的 uiview 和一个滚动视图作为父级。 我正在尝试在滚动视图底部和 uiview 底部之间添加 300 的距离。我需要以编程方式执行此操作,因为无法判断屏幕上给定时间将出现多少视图,因此我需要以编程方式更改它们之间的约束。

我的代码是

view.addConstraint(NSLayoutConstraint(
            item:container1,
            attribute:NSLayoutAttribute.Bottom,
            relatedBy:NSLayoutRelation.Equal,
            toItem:scrollFrame,
            attribute:NSLayoutAttribute.Bottom,
            multiplier:0,
            constant:400)
        )

但它不起作用...显然,在模拟器上,uiview 位于距离顶部 400 处,或者其他位置,因为当我增加常量时它会向下移动(尝试使用 600)

Xcode 打印以下错误:

2015-03-25 12:38:13.342 GraficTest[6612:707546] 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:0x7be906b0 V:|-(48)-[UIView:0x7be8e780]   (Names: '|':UIScrollView:0x7be90340 )>",
    "<NSLayoutConstraint:0x7bfd80e0 V:[UIView:0x7be8e780(257)]>",
    "<NSLayoutConstraint:0x7bf6a940 UIView:0x7be8e780.bottom == + 600>"
)

你能帮帮我吗?

非常感谢!

【问题讨论】:

【参考方案1】:

从错误信息中我可以推断出几件事:

    从 UIScrollView 顶部放置 UIView 48 个点有一个约束 UIView 的高度限制为 257 磅 UIView 底部必须位于 UIScrollView 底部上方 600 点处。

由于 UIScrollView 会有一些高度,比如说 X,从上面的约束来看它应该是

X = 48 + 257 + 600 = 905

但显然情况并非如此,因此布局系统无法满足所有约束。

通过从 UIView 中删除高度限制,您也许可以解决此问题。

【讨论】:

以上是关于Swift编程约束下边距不起作用的主要内容,如果未能解决你的问题,请参考以下文章

编程约束在 UICollectionViewCell Swift 中不起作用

在 Swift 中以编程方式添加约束不起作用

FrameLayout边距不起作用

安卓。设置左边距/右边距不起作用

运行时的WPF窗口边距不起作用

ConstraintLayout 的问题 - 垂直边距不起作用