2016-04-11 1 views
0

Привет, у меня есть назначение, чтобы добавить ограничение программно на мою страницу входа в систему. У меня есть контроллер просмотра внутри контроллера представления. Я добавил свое uitextfield, uilabel, uibutton ..etc. Я хочу, чтобы мой контроль над просмотром был в центре моей главной страницы как в направлениях X, так и Y. Я не получаю правильный вывод.Добавить centreX и centreY Constraint программно с использованием obj c

[_logInView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.logInView attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.view attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.logInView attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logInView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:309]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logInView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:309]]; 

https://drive.google.com/file/d/0B9YZfopxzOv5ME95VTNvN010eWM/view?usp=sharing https://drive.google.com/file/d/0B9YZfopxzOv5dWxWV2Zrd2NwSUU/view?usp=sharing

+0

«Не правильный вывод» на самом деле недостаточно информации ... – Wain

+0

означает, что ограничения centreX и CentreY не применяются к контроллеру представления, но применяются ограничения ширины и высоты. @wain – kalpa

+0

Попробуйте swap 'self.view' с' self.logInView' в первых двух ограничениях? – zcui93

ответ

0

Также вы можете использовать некоторые пользовательские библиотеки для создания ограничений. Я думаю, что стандартный синтаксис не ясен и слишком сложный. Я предпочитаю использовать библиотеку с именем KeepLayout, эта библиотека имеет ясный синтаксис для добавления ограничений. Например, чтобы добавить свои ограничения, вы должны написать одну единственную строку:

#import <KeepLayout.h> 

<....> 
[self.logInView keepCentered]; 
[self.logInView.superview setNeedsLayout]; //because added constraints 
+0

вы можете отправить полный код. – kalpa

+0

Это полный код для настройки вида как централизованного представления в его родительском представлении. –

+0

это объектив c? – kalpa

0

Ваша проблема заключается в том, что ваш withItem и toItem являются неправильно далеко кругом. withItem - это тот вид, который вы хотите применить к ограничению, поэтому в вашем случае его self.loginView.

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logInView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0.0]]; 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.logInView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0.0]]; 
+0

Нет последних двух ограничений для ширины и высоты. и это должно быть ноль. Если я меняю его на self.view, тогда он показывает следующую ошибку. Завершение приложения из-за неотображенного исключения «NSInvalidArgumentException», причина: «*** + [NSLayoutConstraint constraintWithItem: attribute: relatedBy: toItem: attribute: multiplier: constant:]: Неизвестный атрибут макета ' – kalpa

+0

Ах, извините. Я вижу вашу проблему нет, обновит ответ – Lneuner

+0

обновил ответ – Lneuner

0

Я могу рекомендовать читать на новый якорь на основе ограничений строительного комплекта Apple, введенный в iOS9. Они облегчают жизнь. Документация here.

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