0

我对 UIView 进行了子类化,并在其中创建了几个视图。我想在我的视图控制器的视图中创建该视图的一个实例,并且还有另一个自定义视图将放置在该视图下方。我不确定如何将第二个视图放在第一个视图下方。

当我调试帧时,我得到 {{0,0}, {0,0}}。我正在使用 Masonry 进行视图布局。我已经从这个线程尝试了几种解决方案

我创建了一个示例项目,其中包含我尝试过的实际代码。 https://github.com/anuj-rajput/ViewSample

在这个示例项目中,有 2 个子类UIViewPhoneVerificationTopView以及一个从这两个视图创建对象PhoneVerificationPhoneNumberView的视图控制器。我需要以完全垂直对齐的方式(下图)PhoneVerificationViewController对它们进行完美排序。PhoneNumberViewTopView

难道我做错了什么?有没有正确的方法来继承 UIView 然后在控制器中引用它?

这就是视图的样子

截屏

4

1 回答 1

1

当您使用 AutoLayout,并且您希望父视图根据我的子类调整大小时,它需要知道内容有多大。

最顶层视图必须对父视图的顶部有约束。并且最底视图必须对父视图的底部有约束。

目前,您的视图明显不包含子类。

如果您尝试将“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
        }];
于 2016-08-08T21:45:46.163 回答