2017-02-18 2 views
1

Ich habe meine App in Xcode mit iPhone SE-Ansicht angelegt. Die Schaltflächen usw. erscheinen alle unter Test, wie sie sollten.Warum werden diese Schaltflächen in größeren Geräten nicht korrekt angezeigt? (Swift)

Allerdings, wenn ich auf einem großen Bildschirm, d. H. IPhone 7 testen ein paar seltsame Dinge passieren.

1) Schaltflächen umarmen die rechte Seite, obwohl ich die Zwänge von Margen

enter image description here 20px gesetzt werden enter image description here

Und zweitens, eine der Gradient, die ich meine Tasten angewendet haben scheint Stopp 3/4 über die Schaltfläche in diesem Fall:

enter image description here

Es ist der gleiche Code in jedem Fall aufgerufen wird von die Tasten:

let orangeGradient = CAGradientLayer().orangeButtonColor() 
    orangeGradient.frame = self.joinCommunityButton.bounds 
    self.joinCommunityButton.layer.insertSublayer(orangeGradient, at: 0) 

extension CAGradientLayer { 

func bespokeColor() -> CAGradientLayer { 

let topColor = UIColor(red: (46/255.0), green: (63/255.0),blue: (81/255.0), alpha: 1) 
let bottomColor = UIColor(red: (22/255.0), green: (31/255.0),blue: (41/255.0), alpha: 1) 
let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor] 
let gradientLocations: [Float] = [0.0, 1.0] 

let gradientLayer: CAGradientLayer = CAGradientLayer() 
gradientLayer.colors = gradientColors 
gradientLayer.locations = gradientLocations as [NSNumber]? 

return gradientLayer 

} 

func orangeButtonColor() -> CAGradientLayer { 

    let topColor = UIColor(red: (211/255.0), green: (115/255.0),blue: (28/255.0), alpha: 1) 
    let bottomColor = UIColor(red: (171/255.0), green: (80/255.0),blue: (14/255.0), alpha: 1) 
    let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor] 
    let gradientLocations: [Float] = [0.0, 1.0] 

    let gradientLayer: CAGradientLayer = CAGradientLayer() 
    gradientLayer.colors = gradientColors 
    gradientLayer.locations = gradientLocations as [NSNumber]? 

    return gradientLayer 

} 

func purpleButtonColor() -> CAGradientLayer { 

    let topColor = UIColor(red: (112/255.0), green: (41/255.0),blue: (183/255.0), alpha: 1) 
    let bottomColor = UIColor(red: (85/255.0), green: (19/255.0),blue: (159/255.0), alpha: 1) 
    let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor] 
    let gradientLocations: [Float] = [0.0, 1.0] 

    let gradientLayer: CAGradientLayer = CAGradientLayer() 
    gradientLayer.colors = gradientColors 
    gradientLayer.locations = gradientLocations as [NSNumber]? 

    return gradientLayer 

} 

func greenButtonColor() -> CAGradientLayer { 

    let topColor = UIColor(red: (35/255.0), green: (193/255.0),blue: (67/255.0), alpha: 1) 
    let bottomColor = UIColor(red: (31/255.0), green: (148/255.0),blue: (53/255.0), alpha: 1) 
    let gradientColors: [CGColor] = [topColor.cgColor, bottomColor.cgColor] 
    let gradientLocations: [Float] = [0.0, 1.0] 

    let gradientLayer: CAGradientLayer = CAGradientLayer() 
    gradientLayer.colors = gradientColors 
    gradientLayer.locations = gradientLocations as [NSNumber]? 

    return gradientLayer 

} 


} 

Hier ist ein Screenshot von dem, was ich glaube, sind die Auto-Layout-Einstellungen:

enter image description here

+0

Wo wenden Sie die Farbverlaufsschicht auf die Schaltflächen an? Ist autoLayout wirksam? Stellen Sie sicher, dass Sie GradientLayers in 'viewDidAppear' hinzufügen ** oder ** Gradienten in' viewDidLoad' definieren und die Grenzen des Layers in 'viewDidLayoutSubviews' ändern. – Rikh

+0

Ja, ich habe die ersten 3 Zeilen dieses Codes (vor der Erweiterung) in viewDidLoad – RDowns

Antwort

7

In viewDidLoad, autoLayout hat noch keine Wirkung, so dass Ihre Schaltfläche bounds nicht gerätespezifisch sind.

Put

orangeGradient.frame = self.joinCommunityButton.bounds in viewDidLayoutSubviews oder viewDidAppear

Stellen Sie sicher, Steigungen hinzuzufügen oder Aufgaben zu UIView Rahmen oder Grenzen nachviewDidLayoutSubviews aufgerufen wurde Zusammenhang durchführen, wenn Sie autoLayout verwenden.

Auch

nicht die Initialisierung des CAGradientLayer() innerhalb der viewDidAppear oder viewDidLayoutSubviews Funktionen setzen Sie, wie sie mehrmals und halten Hinzufügen von Schichten zu Ihrem UIView genannt werden, sollten Sie nur die Grenzen innerhalb der beiden Methoden ändern .

+0

Ausgezeichnet! Das hat das Problem gelöst, dass die Gradienten abgeschnitten werden. Vielen Dank. Ich habe noch keine richtige Antwort ticket, nur weil ich nicht die Frage mit immer noch ein Problem mit dem Layout der Tasten auf der rechten Seite schließen möchte – RDowns

+0

Das könnte möglicherweise wegen der Steigung auf einer Breite angewendet werden größer als die Schaltflächenbreite, versuchen Sie, die Eigenschaft 'clipsToBounds' auf 'wahr' für die betreffende Schaltfläche zu setzen und prüfen Sie, ob das Ihr Problem löst. – Rikh

+0

Ich habe den Gradienten-Code in den viewDidAppear {} verschoben und das ist auch behoben. Ich denke, es war richtig, es war nicht, dass es außerhalb der Position war, nur der Gradient blutete über die Kante. Vielen Dank – RDowns

-1

Bitte stellen Sie sicher, dass Sie Autolayout in-Schnittstelle verwenden builder.If Sie verwenden dann machen sicher, dass sie auch den Rand verlassen haben.

Verwandte Themen