Как установить ограничение соотношения сторон программным способом в ios

210
12

Я использовал автомат для моего ViewControllers. Я установил позиции V и H в ограничениях. но я хочу знать, как увеличить размер кнопки, когда она изменится на 5, 6 и 6 плюс. Так я добавил ограничения для кнопки входа.


NSArray *btncon_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnLogin(40)]" options:0 metrics:nil views:viewsDictionary];
[btnLogin addConstraints:btncon_V];

NSArray *btncon_POS_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[btnLogin]-100-|" options:0 metrics:nil views:viewsDictionary];
[self.view addConstraints:btncon_POS_H];

NSArray *btncon_POS_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-70-[Title]-130-[lblFirst]-0-[lblSecond]-20-[textusername]-10-[txtpassword]-10-[btnLogin]" options:0 metrics:nil views:viewsDictionary];

[self.view addConstraints:btncon_POS_V];


Но моя проблема в том, когда он управляет левым и правым боковым промежутком. Его получение спрятано в iphone 6 и 6 плюс с тех пор, как это исправлено. Как увеличить размер в зависимости от размера экрана. Я думаю, что это может быть AspectRatio, но как установить ограничение соотношения сторон в коде.

спросил(а) 2021-01-19T20:59:30+03:00 2 месяца, 3 недели назад
1
Решение
304

Нравится это. Попробуйте один раз.


[self.yourview setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.yourview addConstraint:[NSLayoutConstraint
constraintWithItem:self.yourview
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:self.yourview
attribute:NSLayoutAttributeWidth
multiplier:(self.yourview.frame.size.height / self.yourview.frame.size.width)
constant:0]];

или вместо (self.yourview.frame.size.height / self.yourview.frame.size.width) вы можете использовать любое значение float.
Спасибо.

Swift 3.0 -


self.yourview!.translatesAutoresizingMaskIntoConstraints = false
self.yourview!.addConstraint(NSLayoutConstraint(item: self.yourview!,
attribute: NSLayoutAttribute.height,
relatedBy: NSLayoutRelation.equal,
toItem: self.yourview!,
attribute: NSLayoutAttribute.width,
multiplier: self.yourview.frame.size.height / self.yourview.frame.size.width,
constant: 0))

ответил(а) 2021-01-19T20:59:30+03:00 2 месяца, 3 недели назад
130

Swift 3:

yourView.addConstraint(NSLayoutConstraint(item: yourView,
attribute: .height,
relatedBy: .equal,
toItem: yourView,
attribute: .width,
multiplier: 9.0 / 16.0,
constant: 0))

ответил(а) 2021-01-19T20:59:30+03:00 2 месяца, 3 недели назад
115

Вы можете установить "Ограничение по высоте" в Design-time в Interface Builder.
Просто отметьте "Удалить во время сборки", и он удаляется, когда приложение будет запущено.


введите описание изображения здесь
После этого вы можете добавить ограничение "Соотношение сторон", например, в методе viewDidLoad.


В Xamain.iOS для "16: 9" это выглядит так:


    this.ImageOfTheDay.AddConstraint(NSLayoutConstraint.Create(
this.ImageOfTheDay,
NSLayoutAttribute.Height,
NSLayoutRelation.Equal,
this.ImageOfTheDay,
NSLayoutAttribute.Width,
9.0f / 16.0f,
0));

Или, как Mahesh Agrawal сказал:


    [self.ImageOfTheDay addConstraint:[NSLayoutConstraint
constraintWithItem:self.ImageOfTheDay
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:self.ImageOfTheDay
attribute:NSLayoutAttributeWidth
multiplier:(9.0f / 16.0f)
constant:0]];

ответил(а) 2021-01-19T20:59:30+03:00 2 месяца, 3 недели назад
76

Я попробовал все ответы выше, но не работал, и это мое решение с быстрым 3:


let newConstraint = NSLayoutConstraint(item: yourView, attribute: .width, relatedBy: .equal, toItem: yourView, attribute: .height, multiplier: 560.0/315.0, constant: 0)
yourView.addConstraint(newConstraint)
NSLayoutConstraint.activate([newConstraint])
NSLayoutConstraint.deactivate(yourView.constraints)
yourView.layoutIfNeeded()

ответил(а) 2021-01-19T20:59:30+03:00 2 месяца, 3 недели назад
62

Макеты компоновки - это наиболее удобный способ программно установить ограничения.


Предположим, вы хотите установить соотношение сторон 5: 1 для вашей кнопки, тогда вы должны использовать:


button.heightAnchor.constraint(equalTo: button.widthAnchor, multiplier: 1.0/5.0).isActive = true

Здесь полный код:


class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

let button = UIButton(type: .custom)
button.setTitle("Login", for: .normal)
button.backgroundColor = UIColor.darkGray

self.view.addSubview(button)

button.translatesAutoresizingMaskIntoConstraints = false

let margins = view.layoutMarginsGuide

button.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 20.0).isActive = true
button.trailingAnchor.constraint(equalTo: margins.trailingAnchor, constant: -20.0).isActive = true
button.bottomAnchor.constraint(equalTo: margins.bottomAnchor, constant: -20.0).isActive = true
button.heightAnchor.constraint(equalTo: button.widthAnchor, multiplier: 1.0/5.0).isActive = true
}

}


Вот результаты, полученные с помощью кода, написанного выше. Вы можете видеть, что эта кнопка поддерживает соотношение сторон 5: 1 на разных устройствах:


Вид результата

ответил(а) 2021-01-19T20:59:30+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема