2016-09-29 37 views
0

我有一個UIView不能填滿整個屏幕,我想爲該視圖添加頂部邊框。不過,我不斷收到以下:enter image description here什麼時候應該在UIViews中設置邊框?

這裏是我使用的代碼:

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

我怎麼知道爲什麼邊境熄滅屏幕。這是因爲我把邊界放在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圖形還沒有制定。您必須將所有配置放置在UIViewControllerviewDidLoad:viewWillAppear:中的圖形對象上。

0

答案很簡單:

viewWillAppear 

的時候viewWillAppear被調用時,你的子視圖已經奠定了和框架是有效的。由於框架尚未設置,因此在viewDidLoad中執行基於幀的計算通常會遇到問題。

相關問題