Добавление программ программно в 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. Всегда добавляйте ограничения после добавления представления для просмотра иерархии.