Используя язык визуального формата autolayout, можно ли установить ширину представления, равную высоте того же представления?

Используя язык визуального формата autolayout, можно ли установить ширину представления, равную высоте того же представления?

Вот что я хочу сделать:

[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[stopButton(100)]" options:kNilOptions metrics:nil views:views]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-50-[stopButton(stopButton.height)" options:kNilOptions metrics:nil views:views]];

person Andrew Paul Simmons    schedule 13.07.2016    source источник


Ответы (2)


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

Одно полезное ограничение, которое нельзя выразить, — это фиксированное соотношение сторон (например, imageView.width = 2 * imageView.height). Чтобы создать такое ограничение, вы должны использовать ограничениеWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:.

person Luke Van In    schedule 13.07.2016

Ответ Люка Ван Ина о фиксированном соотношении сторон — отличный ответ!

Конечно, если вы просто хотите использовать одно и то же значение в нескольких местах, вы должны изменить код для использования словаря метрик следующим образом:

 NSDictionary* metrics = @{@"stopButtonSize":@100};
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[stopButton(stopButtonSize)]" options:kNilOptions metrics:metrics views:views]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-50-[stopButton(stopButtonSize)]" options:kNilOptions metrics:metrics views:views]];
person Andrew Paul Simmons    schedule 13.07.2016