2016-03-25 11 views
0

Ich versuche, ein Angebot mit einem von der uipresentationcontroller vorgestellt APi-Ansicht zu präsentieren, aber es funktioniert nicht. Was mache ich falsch? Wie ändere ich die angezeigte Ansicht dynamisch, um sie an den Text anzupassen? Vielen Dank.So zentrieren Sie das Etikett in einer Unteransicht mit swift

dies ist mein Code:

override func presentationTransitionWillBegin() { 

    presentedView()!.layer.cornerRadius = 15.0 

    //adding label for quote to the presented view 
    let label = UILabel(frame: CGRectMake(presentedView()!.frame.origin.x, presentedView()!.frame.origin.y, presentedView()!.bounds.width, presentedView()!.bounds.height)) 
    label.center = presentedView()!.center 
    label.textAlignment = NSTextAlignment.Center 
    label.text = readQuotesFromLibrary() 
    presentedView()?.addSubview(label) 
    //rest of the code dealing with uipresentationcontroller goes here ... 

As you can see the text is off }

Antwort

0

Wenn Sie nach Ansicht des Rahmens präsentiert zuweisen, zu beschriften, warum dann center.Label beschriften müssen präsentierte Ansicht Zentrum zuweisen wie gezeichnet werden präsentiert den Rahmen der Ansicht.

+0

danke. Event, wenn ich die Center-Zuweisung entfernen, löst es nicht das Problem – irkinosor

+0

Ok, lassen Sie mich wissen, die Ansicht, deren Hintergrundfarbe ist, die präsentiert wird? –

+0

Die vorgestellte Ansicht soll die weiße sein – irkinosor

0

Der Rahmen Ihres UILabel ist relativ zu seinem Superview, in diesem Fall ist das PresentedView, nicht die Ansicht, auf der das PresentedView angezeigt wird. Daher sollten Sie das Etikett mit der Linie instanziiert:

let label = UILabel(frame: CGRectMake(0, 0, presentedView()!.bounds.width, presentedView()!.bounds.height)) 

Dies stellt die obere linke Ecke des UILabel die linke obere Ecke des presentedView und gibt es die gleiche Breite und Höhe wie die presentedView.

0

Ich habe festgestellt, dass CGRects manchmal unbeabsichtigte Ergebnisse liefert, wie in Ihrem Fall. Wenn Sie eine Alternative ausprobieren möchten, empfehle ich Layout-Einschränkungen. Ich glaube, der folgende Code sollte für Sie funktionieren.

override func presentationTransitionWillBegin() { 

    presentedView()!.layer.cornerRadius = 15.0 

    //adding label for quote to the presented view 
    let label = UILabel() 
    label.text = readQuotesFromLibrary() 
    label.textAlignment = NSTextAlignment.Center 

    presentedView()!.addSubview(label) 
    label.translatesAutoresizingMaskIntoConstraints = false 
    label.widthAnchor.constraintEqualToAnchor(presentedView()!.widthAnchor).active = true 
    label.heightAnchor.constraintEqualToAnchor(presentedView()!.heightAnchor).active = true 
    label.centerXAnchor.constraintEqualToAnchor(presentedView()!.centerXAnchor).active = true 
    label.centerYAnchor.constraintEqualToAnchor(presentedView()!.centerYAnchor).active = true 

    //rest of the code dealing with uipresentationcontroller goes here ... 

Ich wäre nicht überrascht, wenn Sie auch in einen Textumbruch Problem ausgeführt werden, weil das Zitat im Screenshot nicht in der presentationView passen; In diesem Fall möchten Sie vielleicht einen attributedString verwenden und der Zeichenfolge erlauben, sich über mehrere Zeilen zu erstrecken. Es gibt verschiedene Möglichkeiten, ein Label über mehrere Zeilen zu verteilen. Ein attributierter String ist also nicht der einzige Weg, dies zu tun.

Ich hoffe, dass hilft! Entschuldigung, wenn Sie wirklich den CGRect-Weg gehen müssen und das nicht nützlich finden.