Ich erstelle einen Detailbildschirm mit mehreren verschachtelten Ansichten im Storyboard View Controller: ScrollView> UIView> StackView> 5 UI-Ansichten. Jede UI-Ansicht ist ein anderer Abschnitt, der Beschriftungen und Bearbeitungstexte enthält.

Wenn ich den Hintergrund einer der UIViews im Storyboard einstelle, ändert sich dies, spiegelt diese Änderung jedoch nicht wider, wenn ich den Emulator oder ein iPad ausführe.

Unten sehen Sie ein Bild mit der Emulatoransicht links und dem Storyboard in Xcode rechts. Sie können sehen, dass der Emulator in der verschachtelten UIView keine Hintergrundfarbe anzeigt, während das Storyboard dies tut.

Emulator gegen Storyboard

Weil hier gefragt wurde, ist das vollständige Storyboard. Es ist schwer zu erkennen, aber es ist ein Tab-View-Controller, der mit drei Split-View-Controllern verbunden ist.

Vollständiges Storyboard

Durch das Testen mit nur bestimmten Ansichten habe ich es auf die UIStackView eingegrenzt, die die 5 UIViews enthält, die das Problem verursachen. Ich habe versucht, einen Controller anzuschließen und die Farbe im Code zu ändern, aber nichts, was ich versucht habe, scheint es zu ändern.

class ClientDetailViewController: UIViewController {

@IBOutlet weak var basicInfoUIView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    basicInfoUIView.backgroundColor = UIColor.init(displayP3Red: 22, green: 22, blue: 22, alpha: 0.5)
    }
}

Ich erwarte, dass jeder Abschnitt (UIView) eine dunkelgraue Farbe hat, aber stattdessen sind alle klar, damit die Hintergrundfarbe der Bildlaufansicht sichtbar wird.

2
Chris 20 Jän. 2019 im 08:35

3 Antworten

Beste Antwort

UIStackView erlaubt keine Änderung der Hintergrundfarbe:

Die UIStackView ist eine nicht rendernde Unterklasse von UIView. Das heißt, es bietet keine eigene Benutzeroberfläche. Stattdessen werden nur die Position und Größe der angeordneten Ansichten verwaltet. Infolgedessen haben einige Eigenschaften (wie backgroundColor) keine Auswirkungen auf die Stapelansicht. Ebenso können Sie layerClass, draw ( :) oder draw (: in :) nicht überschreiben.

(von UIStackView)

Eine einfache Problemumgehung besteht darin, hinter der Stapelansicht ein weiteres UIView hinzuzufügen, die Einschränkungen so einzurichten, dass sie der Position und Größe der Stapelansicht entsprechen (gleich oben, links, rechts, unten) und die Hintergrundfarbe dieser Ansicht zu ändern.

2
Sulthan 20 Jän. 2019 im 19:56

Bildbeschreibung hier eingeben Ich denke, zuerst sollten Sie Ihren UI-Ansichten unterschiedliche Hintergrundfarben geben und sie dann platzieren. Überprüfen Sie unter einem einzelnen Stapel, ob es funktioniert oder nicht

Ich habe einen Screenshot hinzugefügt, in dem ich UIviews zuerst Hintergrundfarben gegeben und sie dann unter einer Stapelansicht platziert habe, aber sie hatten diese Farben im Gegensatz zu Ihnen, nachdem ich ihnen Hintergrundfarbe einfach aus den Elementen unter dem Controller auf der linken Seite gegeben habe. Wählen Sie die Uiviews aus und platzieren Sie sie unter dem Stapel Aussicht

1
Mayank Wadhwa 21 Jän. 2019 im 03:53

Überprüfen Sie bitte Ihre Farbe. 22 sollte nicht zu [0,1] gehören.

basicInfoUIView.backgroundColor = UIColor.init(displayP3Red: 22.0 / 255.0, green: 22.0 / 255.0, blue: 22.0 / 255.0, alpha: 0.5)
0
E.Coms 20 Jän. 2019 im 15:04