我有一个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;
我怎么知道为什么边框掉在屏幕上。这是因为我将边框放在UIViews init方法内的视图上。当我这样做时,self.announcementCard.frame.size.width
是1000,因此边框离开屏幕的原因。 self.announcementCard.frame.size.width
的宽度和高度为1000.原因是因为UIView没有在其init方法中向UIView添加约束。
因此,我的问题是我应该何时拨打上面写的代码? self.announcementCard.frame.size.width
何时会向其添加约束并更新其框架?
答案 0 :(得分: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;
答案 1 :(得分:0)
在init
图形尚未制作完成。您必须将所有配置放在viewDidLoad:
的{{1}}或viewWillAppear:
中的图形对象上。
答案 2 :(得分:0)
简答:
viewWillAppear
当调用viewWillAppear
时,您的子视图已经布局并且框架有效。在viewDidLoad
中进行基于帧的计算通常会出现问题,因为尚未设置帧。