我试图影响NSLayoutConstraint
子类中的UIView
。但是我把代码放在哪里似乎没有改变自动布局约束。
我以前曾多次使用NSLayoutConstraint
但由于某种原因似乎无法在子类中引用它。
我的约束是
self.ripHeight.constant
通过
连接@property (weak, nonatomic) IBOutlet NSLayoutConstraint *ripHeight;
我已尝试使用init
和awakeFromNib
方法,如下所示
- (id)init {
self = [super init];
if (self) {
//self.ripHeight.constant = 100;
}
return self;
}
-(void)awakeFromNib {
[super awakeFromNib];
// 2 . Change Height of Ripll Container to suit device - bitch
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
//Create Nib Frame
CGRect frameRect = self.frame;
frameRect.size.width = screenWidth;
frameRect.size.height = screenWidth * 1.3333;
self.frame = frameRect;
self.ripHeight.constant = 100;
}
我正在通过
加载视图[self.ripContainer addSubview:customView];
答案 0 :(得分:0)
更改约束后,尝试手动更新布局:
-(void)awakeFromNib {
[super awakeFromNib];
//...
//your code for constraint
[self.superview setNeedsLayout];
}
使接收器的当前布局无效并触发布局 在下一个更新周期中更新。
讨论
当你使用应用程序的主线程时调用此方法 想要调整视图子视图的布局。这种方法制作了一个 请注意并立即返回。因为这种方法可以 不强制立即更新,而是等待下一次更新 循环,您可以使用它来使多个视图的布局无效 在更新任何视图之前。这种行为允许你 将所有布局更新合并到一个更新周期,即 通常表现更好。
答案 1 :(得分:0)
解决此类问题的可能方法是使用awakeAfterUsingCoder
。
它可用作占位符视图。在此处加载视图而不是在ViewController中。还要在XIB中设置布局约束。
有关详细信息,请参阅this链接。