视图负载上的更改约束常量没有影响

Posted

技术标签:

【中文标题】视图负载上的更改约束常量没有影响【英文标题】:Change Constraints constant on view load has no effect 【发布时间】:2016-06-16 11:49:58 【问题描述】:

我有UIPageViewController,其中包含简单的UIViewControllers。 VC 的视图在顶部包含一个UIImageView(方面适合),在底部包含一个 UITextView。 ImageView 的 LayoutConstraints 是:

固定宽度:有一个通向 VCs-Class 的出口 固定高度:VC 级有一个出口 中心 X 等于超级视图中心 X Top 等于 Superviews MarinTop (+8)

ImageView 的 LayoutConstraints 是:

顶部等于 ImageView 底部 底部等于超级视图 MarginBottom (+8) 宽度等于父视图宽度(乘数为 0.8)

这按预期工作。

但是当 VC 被加载并且有图像要显示时,我想改变 imageView 的大小。有最小和最大尺寸,如果图像视图更小或更大,则需要调整其大小。否则,imageview 必须获取图像的大小。

所以我计算实际图像的大小并为两个 LayoutConstraints 设置常量。这些值是正确的,但 ImageView 没有改变。

我尝试将它们设置为viewWillLayoutSubviews,但没有任何变化。

我做错了什么?

【问题讨论】:

您是否在控制台中看到无法同时满足所有约束的警告? 【参考方案1】:

尝试在 viewDidLayoutSubviews 中更新您的视图:

- (void) viewDidLayoutSubviews 
 // setup your constraints here

希望这会有所帮助。

【讨论】:

【参考方案2】:

在下面提供的块中编写您的更改约束代码

dispatch_async(dispatch_get_main_queue(), 

)

【讨论】:

【参考方案3】:

尝试将 ImageView 和文本字段之间的垂直间距更改为灵活 (>=0)。如果这不能解决问题,请添加:

[view setNeedsLayout];
[view layoutIfNeeded];

将 imageview 的大小调整为新图像的大小后。

【讨论】:

以上是关于视图负载上的更改约束常量没有影响的主要内容,如果未能解决你的问题,请参考以下文章

在代码中更改大小分类约束的常量,但它会恢复为情节提要值

以编程方式更改约束只会影响视图的可见部分

如何减慢 MySQL 转储速度以免影响服务器上的当前负载?

约束常量在 iOS 7 中为零,但在 iOS 8 中没有

动态更改自动约束宽度

键盘显示时更改自动布局常量