我正在处理一个包含三个UIImageViews的视图。在情节提要中创建视图和子图像视图。这些图像视图的图像是从服务器加载的。当服务器返回所有三个图像的图像时,它应该如下所示:

当第三个imageview没有可用的图像时,布局应该像这样动态变化(图像缩放到imageview等,我知道这一部分):

我已经在使用Interface Builder很长一段时间了,但我不知道如何实现这一点。
有没有人可以帮我解决这个问题,最好在IB中使用自动调整大小?
发布于 2013-06-26 22:07:45
使用自动布局可以做到这一点,但您仍然需要根据显示的是一个还是两个UIImageViews,通过编程来修改一个约束。
下面是你如何使用自动布局的方法:
创建容器视图
在容器视图的左边缘到左边距处创建约束。将容器视图的右边缘移到右边距。将容器视图的约束height.
创建UIImageViews
<
创建神奇的额外约束
容器UIView只是维护包含视图的边距和高度。
第二个图像视图现在应该有两个拖尾约束,它们都显示为虚线。旋转屏幕应该使容器视图伸展以适应,并且三个UIImageViews也伸展以适应。
当前,第二和第三图像视图之间的约束比第二图像视图和容器视图之间的“魔术”约束更高优先级,导致第二图像视图的右边缘与第三图像视图的左边缘间隔开。要调整两个图像的布局,“魔术”约束必须比另一个具有更高的优先级,从而使第二个图像视图的右边缘与superview的右边缘对齐。
只需为“魔术”约束创建一个IBOutlet (在第二个图像视图上的superview的尾随空格),并根据需要提高和降低优先级。
if (imageCount == 2) {
// Second image view should favor right edge of superview
self.myConstraint.priority = 950;
} else if (imageCount == 3) {
// Second image view should favor left edge of third image view
self.myConstraint.priority = 850;
}必要时,您可能还希望隐藏第三个图像视图。
发布于 2013-06-26 20:30:36
我的选择是,当第三个图像为空时,将第三个imageView的isHidden属性设置为YES。然后相应地指定其他两个图像视图的边界(您说过,您知道如何做到这一点)。
发布于 2013-06-26 20:34:23
检查imageView_3是否没有镜像,然后调整其余两个imageViews的大小,如下所示:
if (imageView_3.image == nil) {
CGRect frame = imageView_1.frame;
frame.size.width += imageView_3.frame.size.width / 2;
imageView_1.frame = frame;
frame = imageView_2.frame;
frame.size.width += imageView_3.frame.size.width / 2;
frame.origin.x += imageView_1.frame.origin.x + imageView_1.frame.size.width + 10/*the gap*/;
imageView_2.frame = frame;
}https://stackoverflow.com/questions/17319860
复制相似问题