自动布局在 centerX-centerY 上不起作用
Posted
技术标签:
【中文标题】自动布局在 centerX-centerY 上不起作用【英文标题】:Autolayout not working on centerX- centerY 【发布时间】:2017-07-17 10:35:03 【问题描述】:我正在尝试手动添加约束;每次代码尝试添加 centerX 和 centerY 约束时,我都会遇到以下错误:
由于未捕获的异常“NSGenericException”而终止应用程序, 原因:'无法在视图上安装约束。是否有约束 从视图的子树之外引用一些东西?那是 非法的。约束: (活动)> 查看:>'
我检查了之前的多个问题,但没有任何帮助:/
谢谢
代码
[cell.contentView addSubview:imageView];
[cell.contentView addSubview:title];
title.translatesAutoresizingMaskIntoConstraints = NO;
imageView.translatesAutoresizingMaskIntoConstraints = NO;
NSLayoutConstraint *imageViewHeightConstraint = [NSLayoutConstraint
constraintWithItem:imageView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:[UIScreen mainScreen].bounds.size.width/8];
NSLayoutConstraint *imageViewWidthtConstraint = [NSLayoutConstraint
constraintWithItem:imageView
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:imageView
attribute:NSLayoutAttributeHeight
multiplier:1.0
constant:0];
NSLayoutConstraint *imageViewCenterXConstraint = [NSLayoutConstraint
constraintWithItem:imageView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:[imageView superview]
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
NSLayoutConstraint *imageViewCenterYConstraint = [NSLayoutConstraint
constraintWithItem:imageView
attribute:NSLayoutAttributeCenterY
relatedBy:NSLayoutRelationEqual
toItem:[imageView superview]
attribute:NSLayoutAttributeCenterY
multiplier:1.0
constant:0];
[imageView addConstraint:imageViewHeightConstraint];
[imageView addConstraint:imageViewWidthtConstraint];
[imageView addConstraint:imageViewCenterXConstraint];
[imageView addConstraint:imageViewCenterYConstraint];
【问题讨论】:
你可以在故事板中做吗?或者它必须是硬编码的...... 它不能在故事板中完成,因为我需要它是动态的! 请将您的代码发布为文本,而不是图片。 尝试删除addConstraint
行并在每次实例化约束后添加.active = YES
。还将[image superview]
更改为cell
@Swinny89 成功了!谢谢
【参考方案1】:
删除addConstraint
行并在每次约束实例化后添加.active = YES
。还要将[image superview]
更改为cell
【讨论】:
【参考方案2】:尝试将centerX和centerY约束添加到imageView的superview,而不是imageView
[cell.contentView addConstraint:imageViewCenterXConstraint];
[cell.contentView addConstraint:imageViewCenterYConstraint];
【讨论】:
【参考方案3】:请在给 UIImageView 添加约束后试试这个。
对于目标 C
[cell.contentView layoutIfNeeded];
[self.view layoutIfNeeded];
对于斯威夫特
cell.contentView.layoutIfNeeded()
self.view.layoutIfNeeded()
请先试试这个,先给出约束,然后将你的 imageView 添加到单元格 contentView 中。
【讨论】:
【参考方案4】:你为什么不使用:
imageView.center = cell.center
它应该使您的图像在单元格中居中。
【讨论】:
问题是专门要求自动布局解决方案。以上是关于自动布局在 centerX-centerY 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章