Как я могу сделать вид авторазмера, чтобы соответствовать супер-вид - PullRequest
2 голосов
/ 11 сентября 2011

у меня есть 2 просмотра

первый - это размер view1 - 100x100

второй - это размер view2 - 200 x200

мой код

[view1 addSubview:view2];

но размер view2 больше, чем view1

как я могу сделать view2 меньше, чтобы соответствовать размеру view1

спасибо

Ответы [ 3 ]

3 голосов
/ 22 июля 2013

Современный способ достижения этого - использование автоматической разметки.Таким образом, независимо от того, как ваш вид вращается или изменяется, они останутся одинакового размера.

В зависимости от вашей настройки, это будет что-то вроде этого

NSLayoutConstraint *widthConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeWidth multiplier:1.f constant:0.f];

NSLayoutConstraint *heightConstraint = [NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:view2 attribute:NSLayoutAttributeHeight multiplier:1.f constant:0.f];

[view1 addConstraints:@[widthConstraint,heightConstraint]];

Если вам нужнодля нацеливания на более раннюю ОС установите равные кадры и используйте autoresizingMask.

2 голосов
/ 22 июля 2013

Если вы хотите поместить большее подпредставление в меньшее суперпредставление, тогда: 1. Сделайте size обоих видов одинаковыми / равными.
2. Сделать происхождение для подпредставления как (0,0). Так как frame свойство принимает местоположение представления в системе координат своего суперпредставления, то для источника подпредставления будет (0,0).

Для вашего случая вы можете сделать что-то вроде этого:

UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, view1.frame.size.width, view1.frame.size.height)];  
[view1 addSubview:view2];

ИЛИ

UIView *view2 = [[UIView alloc] initWithFrame:view1.bounds];  
[view1 addSubview:view2]; 

Это действительно полезно, когда вы хотите уменьшить ваши большие изображения (UIImageView) в меньшие суперпредставления (UIView).

1 голос
/ 11 сентября 2011

из Справочник по классам UIView

Представления могут встраивать другие представления и создавать сложные визуальные иерархии.Это создает отношения родитель-потомок между внедряемым представлением (известным как подпредставление) и родительским представлением, выполняющим внедрение (известное как суперпредставление).Обычно видимая область подпредставления не обрезается до границ своего суперпредставления, но в iOS вы можете использовать свойство clipsToBounds, чтобы изменить это поведение.Родительское представление может содержать любое количество подпредставлений, но каждое подпредставление имеет только одно суперпредставление, которое отвечает за правильное позиционирование своих подпредставлений.

и от frame property reference

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

и от bounds property reference

Прямоугольник границ, который описывает местоположение и размер вида в его собственной системе координат
.

Так что вы должны настроить view1.frame или view2.bounds

[view1 setBounds:CGRectMake(`x`,`y`,`width`,`height`)];

или

[view2 setFrame:CGRectmake(`x`,`y`,`width`,`height`)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...