2016-09-29 38 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中执行基于帧的计算通常会遇到问题。

相关问题