it-swarm.com.de

Wenn Sie die Ansicht mit addSubview hinzufügen, wird die Größe der Ansicht an das übergeordnete Element angepasst

Ich habe ein Problem bei der Verwendung von AddSubview.

Beispielcode:

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]];

Wenn mein Kind hinzugefügt wird, ist es größer als das übergeordnete Element, und die Größe des Frames wird nicht an die übergeordneten Grenzen angepasst. Ich kann "Unteransichten mit Clip" nicht für das übergeordnete Element verwenden, und "Subviews automatisch vergrößern" scheint nicht zu funktionieren, wenn der übergeordnete Frame nicht erneut in der Größe geändert wird. Gibt es eine Eigenschaft, mit der die Größe einer Unteransicht automatisch an die Grenzen der übergeordneten Objekte angepasst wird, ohne dass setFrame für jedes untergeordnete Element verwendet werden muss?

19
Luca

Wenn Sie kein automatisches Layout verwenden, haben Sie versucht, die Maske für die automatische Größenänderung der untergeordneten Ansicht festzulegen. Versuche dies:

myChildeView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
                                 UIViewAutoresizingFlexibleHeight);

Möglicherweise müssen Sie auch anrufen

myParentView.autoresizesSubviews = YES;

um die übergeordnete Ansicht zu veranlassen, ihre Unteransichten automatisch anzupassen, wenn sich der Rahmen ändert.

Wenn Sie die Zeichnung der untergeordneten Ansicht immer noch außerhalb des Rahmens der übergeordneten Ansicht sehen, besteht eine gute Chance, dass die übergeordnete Ansicht ihren Inhalt nicht schneidet. Um das zu beheben, rufen Sie an

myParentView.clipsToBounds = YES;
31
Jeff Kelley

Kopieren Sie einfach den Rahmen der übergeordneten Ansicht in die untergeordnete Ansicht und fügen Sie ihn dann hinzu. Danach funktioniert das Autoresizing. Eigentlich sollten Sie nur die Größe CGRectMake kopieren (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

Getestet in Xcode 9.4, Swift 4 Eine andere Möglichkeit, dieses Problem zu lösen, ist, Sie können hinzufügen 

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

in der Untersichtklasse.

3
Zeesha

das ist alles was du brauchst 

childView.frame = parentView.bounds
1
carmen_munich

Sie können dies jederzeit in Ihrer UIViews - (void)didMoveToSuperview-Methode tun. Es wird aufgerufen, wenn es von Ihrem Elternteil hinzugefügt oder entfernt wird (null, wenn es entfernt wird). Stellen Sie zu diesem Zeitpunkt einfach die Größe Ihres Elternteils ein. Ab diesem Zeitpunkt sollte die Maske für die automatische Größenänderung ordnungsgemäß funktionieren.

0
Sean