2016-10-09 50 views
0

私はUITextFieldに下線を引くことについて質問があります。 私は、下に示すように両端にバーがあるアンダーラインを作ろうとしています。UITextField Swiftのカスタム下線

enter image description here

私は次のことを試してみましたし、この1つを得ました。右端にバーはありません。

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 
    } 
} 

私は左側のバーを作ることができるが、苦労があるためrightEndBorderおそらくの間違ったx位置の右側を作りますか?

誰でも私が間違っていることを教えてもらえますか?

-----編集

は私が200にrightEndBorderのx位置を設定しようとしましたが、それは私に次のことを与えました。

enter image description here

しかし、私は300に設定しようとした場合、私はもうそれを見ることはありません。

-----全体のテキストフィールドが画面に表示された場合はチェック編集

enter image description here

-----それは私が推測するテキストフィールドの幅を変更し、先頭と末尾の制約ということであった編集

enter image description here

-----ソリューション

問題は、私はテキストフィールドに制約を先頭と末尾いたことだったとunlineが挿入された後、これらの制約は、幅を変更しました。 googleを検索した後、関数内に制約が適用された後に下線を付ける必要があるとわかりました。viewDidLayoutSubviews()

+0

このコードを実行した後でtextFieldの幅を変更していますか? –

+0

@IanMosesストーリーボードに設定された制約がその幅を変更しないとは思いません。ストーリーボード上にテキストフィールドを作成し、viewDidLoad()に下線を追加しました。 – eChung00

+0

初期化後、テキストフィールドとテキストフィールドrightEndBorder x-originsを印刷できますか?これらの値は何ですか? –

答えて

1

コメント欄から再入力して回答します。

問題は、いずれかのビューを遮断なっている(したがって、あなたが右の枠線は表示されません)または右端の境界線が右に設定した後、遠くにシフトされていることのようです。これを疑う理由は、右側の枠線がx = 200に配置されている写真からのものです。なぜなら、下の境界線に沿って半分をはるかに超えているが、その線に沿って40%しかなければならないからです。

アップデート:この質問に対する正しい答えが課される制約がテキストフィールドの幅は変化させた

+0

ありがとうイアン。 – eChung00

+0

問題ありません、喜んで助けてください。 –

関連する問題