Изменение размера представления к его родителю при добавлении с помощью addSubview - PullRequest
22 голосов
/ 17 ноября 2009

У меня проблема при использовании addSubview.

Пример кода:

ParentView *myParentView = [[ParentView alloc] initWithNibName:@"ParentView " bundle:nil];
ChildeView *myChildeView = [[ChildeView alloc] initWithNibName:@"ChildeView" bundle:nil];

//...  parent frame resized with setFrame lets say to x:0, y:0, W:320, H:411

[[myParentView view] addSubview: [myChildeView view]];

Мой дочерний элемент при добавлении больше родительского и не изменяет размер своего кадра до родительских границ. Я не могу использовать «клип подпредставлений» на родительском, и «Авторазмер подпредставлений», кажется, не работает, если родительский кадр не изменен размер снова. Есть ли свойство, позволяющее автоматически изменять размер подпредставления до границ своего родителя, не используя setFrame для каждого дочернего элемента?

Ответы [ 5 ]

32 голосов
/ 17 ноября 2009

Если вы не используете автоматическую компоновку, пытались ли вы установить маску авторазмера дочернего представления? Попробуйте это:

myChildeView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                                 UIViewAutoresizingFlexibleHeight);

Также вам может понадобиться позвонить

myParentView.autoresizesSubviews = YES;

, чтобы заставить родительское представление автоматически изменять размеры своих подпредставлений при смене кадра.

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

myParentView.clipsToBounds = YES;
12 голосов
/ 17 июля 2015

Просто скопируйте рамку родительского представления в дочернее представление и добавьте его. После этого авторазмер будет работать. На самом деле вы должны только скопировать размер CGRectMake (0, 0, parentView.frame.size.width, parentView.frame.size.height)

childView.frame = CGRectMake(0, 0, parentView.frame.size.width, parentView.frame.size.height);
[parentView addSubview:childView];
5 голосов
/ 04 сентября 2018

Проверено в Xcode 9.4, Swift 4 Другой способ решить эту проблему - добавить

.
override func layoutSubviews() {
        self.frame = (self.superview?.bounds)!
    }

в подпредставлении.

3 голосов
/ 10 октября 2018

это все, что вам нужно

childView.frame = parentView.bounds
0 голосов
/ 18 ноября 2009

Вы всегда можете сделать это в вашем методе UIViews - (void)didMoveToSuperview. Он будет вызван при добавлении или удалении от вашего родителя (ноль при удалении). В этот момент просто установите свой размер в соответствии с размером вашего родителя. С этого момента маска авторазмера должна работать правильно.

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