我在View Controller上有Imageview和UIView。如果Imageview为零或图像不可用,则UIView替换其位置。任何知道如何使用自动布局?
为了尝试目的,我已经确定了两者的高度和宽度(Imageview和UIView)。 Imageview具有“前8个像素”和“水平容器”边距。 UIView有“Imageview前0”和“水平容器”边距。将Imageview设置为nil但不起作用。
答案 0 :(得分:1)
一个好的建议是在stackView中添加图像视图和视图,并按照以下步骤进行操作:UIStackView Distribution Fill Equally。
但是,您可以通过在底部视图和顶部布局指南之间添加额外约束来实现您的要求:
然后,将其priority
值设置为小于默认值(1000) - 在我的示例中,我将其设置为500-并将其constant
值设置为0:
它的外观应该显示为虚线,这意味着还有另一个约束 - 具有更高的优先级值 - 决定视图的x轴,如果此约束已被移除/停用,则应激活虚线。
最后,确保如果没有可用的图像,您必须从其超级视图中删除图像视图(调用imageView.removeFromSuperview()
),将其设置为隐藏或将其alpha设置为0.0不会激活点缀约束:
class ViewController: UIViewController {
//...
@IBOutlet weak var imageView: UIImageView!
// I'm checking in 'viewDidLoad' method just for describing purposes,
// of course, you can do the check when needed...
override func viewDidLoad() {
// if there is something wrong, you should call:
imageView.removeFromSuperview()
}
//...
}
输出结果为:
答案 1 :(得分:0)
您可以通过使用自动布局优先考虑约束来管理此问题。从ImageView和TopLayout中获取UIView顶部空间。为约束(任何小于1000的值)分配较低的优先级,您可以从顶部布局指南中获得顶部空间。如果你的图像是nil,使用imageview.RemoveFromSuperView()从视图中删除图像视图,UIView将自动采用下一个约束,即来自TopLayout指南。我附上了截图,在storyBoard上找到约束的优先级。
答案 2 :(得分:0)
取出UIImageView
的高度约束出口并执行以下代码
if (imageview == nil){
imageViewHeightConstraint.constant = 0
}
else{
imageViewHeightConstraint.constant = 60
}
您可以询问其他查询。