Добавление ограничений программно в 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
. Вот вывод:
У нас есть лучший вариант, доступный из 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: всегда добавлять ограничения после добавления представления для просмотра иерархии.