2017-03-15 5 views
1

正確ではない私はここに私のラベルの境界線を作成するためのコードを使用していますラベル:私は私にこれを追加するとき、しかしスウィフト - 幅が

拡張子のCALayer {

func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) { 

    let border = CALayer() 

    switch edge { 
    case UIRectEdge.top: 
     border.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: thickness) 
     break 
    case UIRectEdge.bottom: 
     border.frame = CGRect(x: 0, y: self.frame.height - thickness, width: self.frame.width, height: thickness) 
     break 
    case UIRectEdge.left: 
     border.frame = CGRect(x: 0, y: 0, width: thickness, height: self.frame.height) 
     break 
    case UIRectEdge.right: 
     border.frame = CGRect(x: self.frame.width - thickness, y: 0, width: thickness, height: self.frame.height) 
     break 
    default: 
     break 
    } 

    border.backgroundColor = color.cgColor; 

    self.addSublayer(border) 
} 

}

レイヤーこれは私が得るものです:あなたが見ることができるように、幅は完全にas you can see, the width is totally messed up を台無しにして、frame.widthは不正確です。

なぜこれが可能かわかりません。私はストーリーボードに幅を設定しません。これは、すべての電話幅でラベルが機能するようにするためです。

事前にお世話になりました!

+0

ボーダーレイヤーを追加した後にラベルのサイズが変更されていますか?ラベルのサイズが変更されたときにサイズを変更する必要があります –

+0

あなたは何を知っていますか...それは...分を与えます – Ryan

+0

@AshleyMills、いいえ、そうではありません。もともと私はカスタムテーブルビューセルに境界を設定していたので、テキストフィールドが割り当てられた後にテーブルビューに移動しました。これは問題を解決しませんでした – Ryan

答えて

0

CALayer対応するUIViewの場合、自動的にサイズが変更されません。 あなたはあなたのためにすべてこのロジックを扱っUILabelBorderedLabelサブクラスを作ることができ、あなたの境界線の幅/高さ

override func layoutSubviews() { 
    super.layoutSubviews() 
    ...resize layer or redraw borders here... 
} 

UIViewlayoutSubviewsを上書きして更新する必要があります。

EDIT

あなたがUITableViewCellのサブクラスを作成し、独自のBorderedLabelビューを追加することに対処したくない場合は、あなただけの境界線を設定する前に、レイアウトを強制する必要があるかもしれません。

私はちょうどあなたが任意のコードを共有していないので、推測しているが、あなたはlabel.text="4517 Bedford..."、その後label.layer.addBorder()を呼び出している場合は、あなたがする必要があるすべてはあなたの前にaddBorder方法をレイアウトパスをトリガーするための呼び出しlayoutIfNeeded()は、フレームサイズを測定しています。

cell.label.text = "4517 Bedford..." 
cell.layoutIfNeeded() 
cell.label.layer.addBorder(...) 
+0

カスタムテーブルビューセルでこれらのラベルを使用していますが、どのようにそれらをすべてのテーブルビューセルに適用できますか? – Ryan