我已经将UIView子类化,并在其中创建了一些视图。我想在视图控制器的视图中创建此视图的实例,并且还有另一个自定义视图,该视图将放置在该视图下方。我不知道如何将第二个视图放在第一个视图下面。
当我调试帧时,我得到{{0,0},{0,0}}。我正在使用砌体进行视图布局。我尝试了this thread
的几个解决方案我创建了一个示例项目,其中包含我尝试过的实际代码。 https://github.com/anuj-rajput/ViewSample
在此示例项目中,有2个UIView
,PhoneVerificationTopView
和PhoneVerificationPhoneNumberView
的子类以及一个视图控制器PhoneVerificationViewController
,它们可以从这两个视图中创建对象。我需要完美地对它们进行排序,使它们完全垂直对齐(PhoneNumberView
低于TopView
)。
我做错了吗?有没有一种正确的方法可以将UIView子类化,然后在控制器中引用它?
这就是视图的样子
答案 0 :(得分:1)
当您使用AutoLayout时,如果希望父视图根据I'ts子类调整大小,则需要知道内容的大小。
最顶层的视图必须有一个约束到父视图的顶部。 最底层的视图必须对父视图的底部有一个约束。
目前,您的观点非常不包含子类。
如果你试试,例如将“topView”的背景颜色设置为红色, 你会注意到,它并没有改变我的颜色。那是因为我的大小是0。 我没有包装内容。 如果你将“clipToBound”设置为YES,你也不会看到它的子类。
要修复它,请从底部视图添加底部约束到父视图:
[self.subtitleTextLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.titleTextLabel);
make.width.equalTo(self.mas_width).multipliedBy(0.7);
make.top.equalTo(self.titleTextLabel.mas_bottom).with.offset(10.f);
make.bottom.equalTo(self.mas_bottom); //This line is added
}];
[self.sendButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self);
make.width.equalTo(self).multipliedBy(0.4);
make.height.equalTo(@40);
make.top.equalTo(self.phoneNumberTextView.mas_bottom).with.offset(30.f);
make.bottom.equalTo(self.mas_bottom); // This line is added
}];