Подтвердить что ты не робот

Изменение размера изображения для родителя при добавлении с помощью 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]];

Мой ребенок при добавлении больше, чем родительский, и не изменяет размер рамки в родительских границах. Я не могу использовать "подзаголовки клипов" в родительском элементе, и "Autoresize Subviews", похоже, не работает, если родительский фрейм не изменяется снова. Есть ли свойство, которое автоматически изменяет размер subview на его родительские границы без использования setFrame для каждого дочернего элемента?

4b9b3361

Ответ 1

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

myChildeView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                                 UIViewAutoresizingFlexibleHeight);

Кроме того, вам может потребоваться позвонить

myParentView.autoresizesSubviews = YES;

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

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

myParentView.clipsToBounds = YES;

Ответ 2

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

Ответ 3

Протестировано в Xcode 9.4, Swift 4 Еще один способ решения этой проблемы - добавить

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

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

Ответ 4

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

childView.frame = parentView.bounds

Ответ 5

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