2016-10-09 8 views
0

Ich habe eine Frage über eine Unterstreichung auf UITextField. Ich versuche, eine Unterstreichung mit Balken an jedem Ende wie unten gezeigt zu machen.UITextField benutzerdefinierte Unterstreichung in Swift

enter image description here

habe ich versucht, die folgende und diese ein. Es gibt keine Bar am rechten Ende.

enter image description here

extension UITextField { 
func underline() { 
    let borderWidth = CGFloat(1.0) 
    let endBorderHeight = CGFloat(10.0) 

    let bottom = CALayer() 
    bottom.frame = CGRect(
     x: 1, 
     y: self.frame.height - borderWidth, 
     width: self.frame.width - 2, 
     height: borderWidth) 

    bottom.borderWidth = borderWidth 
    bottom.borderColor = UIColor.lightGrayColor().CGColor 

    let leftEndBorder = CALayer() 
    leftEndBorder.frame = CGRect(
     x: 0, 
     y: self.frame.height - endBorderHeight, 
     width: borderWidth, 
     height: endBorderHeight) 
    leftEndBorder.borderWidth = borderWidth 
    leftEndBorder.borderColor = UIColor.lightGrayColor().CGColor 

    print(bottom.frame.width) 
    let rightEndBorder = CALayer() 
    rightEndBorder.frame = CGRect(
     x: self.frame.width - 1, 
     y: self.frame.height - endBorderHeight, 
     width: borderWidth, 
     height: endBorderHeight) 

    rightEndBorder.borderWidth = borderWidth 
    rightEndBorder.borderColor = UIColor.lightGrayColor().CGColor 

    self.layer.addSublayer(leftEndBorder) 
    self.layer.addSublayer(bottom) 
    self.layer.addSublayer(rightEndBorder) 
    self.layer.masksToBounds = true 
    } 
} 

Ich konnte die Bar auf der linken Seite machen, aber mit Mühe auf die rechte Seite zu machen wegen der falschen x Position des rightEndBorder wahrscheinlich?

Kann mir jemand sagen, was ich falsch mache ??

----- bearbeiten

Ich versuchte, die x-Position des rightEndBorder bis 200 und es gab mir die folgende einzustellen.

enter image description here

Aber wenn ich es auf 300 zu setzen versucht, ich es nicht mehr sehen.

----- bearbeiten

geprüft, ob das gesamte Textfeld auf dem Bildschirm angezeigt wurde.

enter image description here

----- bearbeiten

Es war, dass die vorderen und hinteren Einschränkungen, die die Breite des Textfield verändert, denke ich.

enter image description here

----- Lösung

Das Problem war, dass ich hatte führende und Einschränkungen für das Textfeld nachlauf und diese Einschränkungen geändert, um die Breite, nachdem der unline eingefügt wurde. Nachdem ich google gesucht hatte, dachte ich, dass ich die Unterstreichung machen musste, nachdem die Beschränkungen angewandt wurden, die in der Funktion viewDidLayoutSubviews() ist.

+0

Ändern Sie die TextField-Breite nach dem Ausführen dieses Codes? –

+0

@IanMoses Ich denke nicht, wenn die Einschränkungen auf dem Storyboard nicht seine Breite ändern ..Ich habe Textfield auf Storyboard gemacht und einfach die Unterstreichung in viewDidLoad() hinzugefügt. – eChung00

+0

Können Sie Ihr Textfeld und Textfeld RightEndBorder X-Ursprünge nach der Initialisierung drucken. Was sind diese Werte? –

Antwort

1

Neueingabe von Kommentaren als Antwort.

Das Problem scheint entweder zu sein, dass die Ansicht abgeschnitten wird (daher wird die rechte Grenze nicht angezeigt) oder die rechte Endgrenze wird nach der Einstellung weiter verschoben. Der Grund für den Verdacht liegt in Ihrem Bild, wo die rechte Grenze bei x = 200 liegt, weil es gut die Hälfte entlang der unteren Grenze ist, aber nur 40% des Weges entlang der Linie sein sollte.

Update:

Die richtige Antwort auf diese Frage wurde die auferlegten Zwänge das Textfeld Breite verursacht zu ändern.

+0

Vielen Dank Ian. – eChung00

+0

Kein Problem, glücklich zu helfen. –

Verwandte Themen