it-roy-ru.com

Изменение размера представления к его родителю при добавлении с помощью addSubview

У меня проблема при использовании 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 для каждого дочернего элемента?

19
Luca

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

myChildeView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                                 UIViewAutoresizingFlexibleHeight);

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

myParentView.autoresizesSubviews = YES;

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

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

myParentView.clipsToBounds = YES;
31
Jeff Kelley

Просто скопируйте рамку родительского представления в дочернее представление и добавьте его. После этого авторазмер будет работать. На самом деле вы должны только скопировать размер 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];
11
cat

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

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

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

3
Zeesha

это все что тебе нужно 

childView.frame = parentView.bounds
1
carmen_munich

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

0
Sean