Добавление ограничений программно в Objective-C

Мне нужно добавить некоторые ограничения к UIButton программно. Мне нужно, чтобы он был центрирован горизонтально для просмотра, центрирован вертикально для просмотра, соотношение сторон к его обзору и соотношение сторон к себе.

может кто-нибудь помочь мне, пожалуйста?

спасибо.

3 ответов


Я получу мяч для вас, чтобы вы могли увидеть общую идею, в противном случае используйте документацию, предоставленную 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];

Итак, как вы можете видеть, мы говорим ограничение атрибут центра x UIButton тоже атрибут центра x представления контроллеров вида без дополнительных смещений (множитель установлен в 1.0 и константа 0).

убедитесь, что вы добавить его в свой вид вид контроллера не кнопка, потому что кнопка не была выложена в этот момент, и поэтому вы не можете добавить к ней ограничение! (Пожалуйста, кто-нибудь поправьте меня, если я ошибаюсь здесь). Я добавляю свои ограничения в метод viewDidLoad.


Я нашел этот учебник лучшим.

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's superview*/
[self addConstraints:@[leftButtonXConstraint, leftButtonYConstraint, widthConstraint, heightConstraint]];

в коде выше, я поставил левую кнопку constraints. Вот вывод:

Portrait

Landscape


У нас есть лучший вариант, доступный из 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

NB: всегда добавлять ограничения после добавления представления для просмотра иерархии.