2016-09-29 5 views
0

私は画面全体を満たしていないUIViewを持っており、そのビューに上の境界線を追加したいと思います。しかし、私は次のことを得続ける:いつUIViewに罫線を設定する必要がありますか?

CGFloat thickness = 4.0f; 
CALayer *topBorder = [CALayer layer]; 
topBorder.frame = CGRectMake(0, 0, self.announcementCard.frame.size.width, thickness); 
topBorder.backgroundColor = [UIColor blueColor].CGColor; 

を境界線が画面消灯なぜ私が知っている方法:enter image description here

ここで私が使用していたコードです。これは、UIViewsのinitメソッドの内部に境界線を配置するためです。私がこれを行うとき、self.announcementCard.frame.size.widthは1000であり、なぜ境界が画面から外れるのか? self.announcementCard.frame.size.widthの幅と高さは1000です。これは、UIViewがinitメソッドのUIViewに制約を追加していないためです。

私の質問は、私が上記で書いたコードを呼び出すべきときです。 self.announcementCard.frame.size.widthに制約が追加され、そのフレームが更新されるのはいつですか?

答えて

1

viewDidLoadメソッドでサブビュー(またはサブレイヤ)を追加する必要があります。しかし、あなたは、自動レイアウトはあなたのサブレイヤの参照を保持し、viewDidLayoutSubviews方法でそれを更新使用している場合:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _borderLayer = [CALayer layer]; 

    [self.view.layer addSublayer:_borderLayer]; 
} 


- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 

    _borderLayer.frame = CGRectMake(0, 0, self.view.bounds.size.width, 3); 
} 

をそれ以外の場合あなたは、単にclipsToBoundsビューがサブビューを避けるためにできることは境界を越えて見えるようにします。

self.view.clipsToBounds = YES; 
0

initグラフィックスはまだ作成されていません。 viewDidLoad:またはviewWillAppear:のグラフィックオブジェクトにすべての設定をUIViewControllerにする必要があります。

0

短い答え:viewWillAppearが呼び出される時まで

viewWillAppear 

は、あなたのサブビューがレイアウトされているとフレームが有効です。 viewDidLoadでフレームベースの計算を行うと、フレームが設定されていないために問題が発生することがよくあります。

関連する問題