Измените размер суперпредставления, чтобы сделать его размер равным размеру его подпредставлений
Я создал подкласс UIView и создал несколько представлений внутри него. Я хочу создать экземпляр этого представления внутри представления моего контроллера представления, и есть другое настраиваемое представление, которое будет размещено ниже этого представления. Я не уверен, как мне поставить второй вид под моим первым.
Когда я отлаживаю кадры, я получаю {{0,0}, {0,0}}. Я использую масонство для просмотра макета. Я пробовал несколько решений из этой темы
Я создал пример проекта, в котором есть реальный код, который я пробовал. https://github.com/anuj-rajput/ViewSample
В этом примере проекта есть 2 подкласса UIView
, PhoneVerificationTopView
а также PhoneVerificationPhoneNumberView
и контроллер вида PhoneVerificationViewController
который создает объекты из обоих этих представлений. Мне нужно идеально упорядочить их таким образом, чтобы они идеально выровнялись по вертикали (PhoneNumberView
ниже TopView
).
Я делаю что-то неправильно? Есть ли правильный способ создать подкласс UIView и затем передать его в контроллер?
Вот так должен выглядеть вид
1 ответ
Когда вы используете AutoLayout и хотите, чтобы размер родительского представления изменялся в соответствии с подклассами I'T, необходимо было знать, насколько велик контент.
Самый верхний вид должен иметь ограничение к вершине родительского вида. И самый нижний вид должен иметь ограничение к низу родительского вида.
В настоящее время ваши взгляды не содержат там подклассов.
Если вы попытаетесь, например, установить цвет фона "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
}];