2016-08-08 4 views
0

Я подклассифицировал UIView и создал несколько его представлений. Я хочу создать экземпляр этого представления внутри представления диспетчера представления, и есть еще один пользовательский вид, который будет помещен ниже этого представления. Я не уверен, как поставить второй вид ниже своего первого представления.Измените размер супервизора, чтобы сделать его размер равным размеру его подзонов

Когда я отлаживаю фреймы, я получаю {{0,0}, {0,0}}. Я использую масонство для просмотра макета. Я пробовал несколько решений от this thread

Я создал образец проекта, который имеет фактический код, который я пробовал. https://github.com/anuj-rajput/ViewSample

В этом примере проекта, есть 2 подклассы UIView, PhoneVerificationTopView и PhoneVerificationPhoneNumberView и контроллер PhoneVerificationViewController вид, который создает объекты из обеих этих точек зрения. Мне нужно идеально упорядочить их таким образом, чтобы они были идеально выровнены по вертикали (PhoneNumberView ниже TopView).

Я что-то не так? Есть ли правильный способ подкласса UIView, а затем передать его в контроллер?

Это как вид должен выглядеть

Screenshot

+0

Вы проект не компилируется для меня. Какую версию cocoapod вы используете? Плюс, вы рассматривали использование UIStackView? Кажется, это очень подходит для этого сценария – MCMatan

+0

@MCMatan CocoaPods версия 1.0.1. Я попытался рассмотреть UIStackView, но он доступен только в iOS 9, и мой проект должен быть обратно совместим с iOS 8 :( –

ответ

1

При использовании AutoLayout, и вы хотите, чтобы родительский вид, чтобы изменить размер в соответствии с I'ts подклассов, это необходимо, чтобы знать, как большое содержание является.

Самый верхний вид должен иметь ограничение в верхней части родительского вида. И самое нижнее представление должно иметь ограничение для нижней части родительского представления.

В настоящее время ваши взгляды остро не содержат подклассов.

Если вы попытаетесь, например, установить цвет фона «topView» на красный, Вы заметите, что он не меняет цвет I'ts. Это потому, что размер я равен 0. Я не обертываю контент. Если вы установите для параметра «clipToBound» значение «ДА», вы также не увидите его подклассы.

Чтобы это исправить, добавьте нижнее ограничение, с нижней точкой зрения вышестоящего зрения:

[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 
     }]; 
+0

Кажется, что все нормально. Мне нужно понять, что это ограничение делает для представления? –

+1

Это говорит вид, какой размер у него есть. Перед тем, как у вас возникли ограничения, ссылающиеся на ширину (например, make.width.equalTo (self.mas_width) .multipliedBy (0.7)) и верх (make.top.equalTo (self);) Но вы не имел ограничения, ссылающегося на дно, поэтому он не знал, что я высок. – MCMatan

+0

Ах, спасибо! Спасибо, сэр –

Смежные вопросы