Добавление программ программно в Objective-C
Мне нужно добавить некоторые ограничения в UIButton
программно.
Мне нужно, чтобы он был горизонтально ориентирован на супервизор, с вертикальной ориентацией на супервизор, соотношение сторон и его вид сверху и соотношение сторон к себе.
Кто-нибудь может мне помочь?
Спасибо.
Ответы
Ответ 1
Я заберу мяч для вас, чтобы вы могли увидеть общую идею, иначе используйте документацию, как это предусмотрено Larme.
Добавьте ограничение в свой супервизор (возможно, ваш контроллер просмотра).
NSLayoutConstraint *centreHorizontallyConstraint = [NSLayoutConstraint
constraintWithItem:self.uiButton
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
[self.view addConstraint:centreHorizontallyConstraint];
Итак, как вы можете видеть, мы говорим, что атрибут center x UIButton также является атрибутом центра x представления View Controllers без дополнительных смещений (множитель установлен в 1.0 и постоянный 0).
Убедитесь, что вы добавили его в представление контроллера просмотра, а не кнопку, потому что кнопка не была выложена в этот момент, и поэтому вы не можете добавить к ней ограничение! (Пожалуйста, кто-то поправьте меня, если я ошибаюсь здесь). Я добавляю свои ограничения в метод viewDidLoad.
Ответ 2
Я нашел этот учебник лучше всего.
http://www.tutorialspoint.com/ios/ios_auto_layouts.htm
Моим требованием было установить:
- Ведущее пространство
- Верхнее пространство
- фиксированная ширина
- фиксированная высота
Добавив NSLayoutConstraint
с помощью кода ниже, я смог его достичь
self.btnCoin.translatesAutoresizingMaskIntoConstraints = NO;
/* Leading space to superview */
NSLayoutConstraint *leftButtonXConstraint = [NSLayoutConstraint
constraintWithItem:self.btnCoin attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual toItem:self attribute:
NSLayoutAttributeLeft multiplier:1.0 constant:30];
/* Top space to superview Y*/
NSLayoutConstraint *leftButtonYConstraint = [NSLayoutConstraint
constraintWithItem:self.btnCoin attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual toItem:self attribute:
NSLayoutAttributeTop multiplier:1.0f constant:258];
/* Fixed width */
NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:self.btnCoin
attribute:NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:35];
/* Fixed Height */
NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:self.btnCoin
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:12];
/* 4. Add the constraints to button superview*/
[self addConstraints:@[leftButtonXConstraint, leftButtonYConstraint, widthConstraint, heightConstraint]];
В приведенном выше коде установите левую кнопку constraints
. Вот результат:
![Портрет]()
![Пейзаж]()
Ответ 3
У нас есть лучший вариант с iOS 9+
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectZero];
imageView.translatesAutoresizingMaskIntoConstraints = false;
[self.view addSubview:imageView];
[imageView.widthAnchor constraintEqualToConstant:imageSize.width].active = YES;
[imageView.heightAnchor constraintEqualToConstant:imageSize.height].active = YES;
[imageView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor].active = YES;
[imageView.topAnchor constraintEqualToAnchor:self.view.topAnchor constant:25].active = YES;
Swift 4
var imageView = UIImageView(frame: CGRect.zero)
imageView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(imageView)
imageView.widthAnchor.constraint(equalToConstant: imageSize.width).isActive = true
imageView.heightAnchor.constraint(equalToConstant: imageSize.height).isActive = true
imageView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 25).isActive = true
// OR you can use: NSLayoutConstraint.activate([NSLayoutConstraint]) to activate all at once.
NB. Всегда добавляйте ограничения после добавления представления для просмотра иерархии.