Как предотвратить рост суперпредставления при добавлении пропорционального ограничения ширины (OSX AutoLayout) - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть тестовое представление, внутри которого есть метка (NSTextField), и я программно добавляю ограничение пропорциональной ширины, чтобы мой тестовый вид занимал 1/3 ширины своего суперпредставления (представление контроллера основного вида). Когда я устанавливаю короткий заголовок, например, «короткий текст» для метки, мой тестовый вид отображается правильно (он занимает 1/3 ширины суперпредставления). Однако, когда я пытаюсь установить длинное название, например, «длинный длинный длинный длинный длинный длинный текст» для метки, суперпредставление увеличивается, и метка показывает полный текст. Я ожидаю, что размер суперпредставления не должен изменяться, мой тестовый вид должен занимать 1/3 ширины, а моя метка должна быть усечена, чтобы показать "..." в хвосте.

Тестовый вид отображается правильно с коротким текстом: superview is not grown

Тестовое представление отображается некорректно с длинным текстом: superview is grown

Мои коды для программного добавления ограничений для тестового просмотра:

TestView *testView = [[TestView alloc] initWithFrame:NSMakeRect(5, 10, 120, 30)];

NSString *title = @"long long long long long long text";
//NSString *title = @"short text";

[testView setTitle:title];

[self.view addSubview:testView];

float multiplierWidth = (float) 1/3;
float multiplierLeading = (float) 1/3;

NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:testView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:testView.superview attribute:NSLayoutAttributeWidth multiplier:multiplierWidth constant:0.0];

NSLayoutConstraint *leadingConstraint = [NSLayoutConstraint constraintWithItem:testView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:testView.superview attribute:multiplierLeading==0?NSLayoutAttributeLeading:NSLayoutAttributeTrailing multiplier:multiplierLeading==0?1.0:multiplierLeading constant:0.0];

NSLayoutConstraint *topConstraint = [NSLayoutConstraint constraintWithItem:testView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:testView.superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:testView.frame.origin.y];

NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:testView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:testView.frame.size.height];

[testView setTranslatesAutoresizingMaskIntoConstraints:NO];

[testView addConstraint:heightConstraint];
[testView.superview addConstraint:topConstraint];

[testView.superview addConstraint:leadingConstraint];
[testView.superview addConstraint:widthConstraint];

Вот пример проекта: Пример проекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...