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?
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;
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];
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.
das ist alles was du brauchst
childView.frame = parentView.bounds
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.