我在项目中使用故事板。故事板具有自动布局的自定义视图。
CustomView.h
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
NSLog (@"view: %f", self.frame.size.width); //Returns wrong
NSLog (@"view: %f", self.bounds.size.width); //Returns wrong
}
return self;
}
如果我运行应用程序,它会显示错误的框架。
帮我解决这个问题
答案 0 :(得分:2)
因为在initWithCoder
中,constraints
尚未应用于视图。
示例:
代码
-(void)viewDidAppear:(BOOL)animated{
NSLog (@"viewDidAppear: %f", self.testview.frame.size.width);
}
-(void)viewDidLayoutSubviews{
NSLog (@"viewDidLayoutSubviews: %f", self.testview.frame.size.width);
}
-(void)awakeFromNib{
NSLog (@"awakeFromNib: %f", self.testview.frame.size.width);
}
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self = [super initWithCoder:aDecoder]) {
NSLog (@"initWithCoder: %f", self.testview.frame.size.width);
}
return self;
}
并记录
2015-06-11 19:09:27.647 OCTest[717:20692] initWithCoder: 0.000000
2015-06-11 19:09:27.649 OCTest[717:20692] awakeFromNib: 0.000000
2015-06-11 19:09:27.696 OCTest[717:20692] viewDidLayoutSubviews: 320.000000
2015-06-11 19:09:27.746 OCTest[717:20692] viewDidAppear: 320.000000
答案 1 :(得分:0)
我遇到了同样的问题,如果你想在InitWithCoder方法中取屏幕的大小 - 这样做吧
CGFloat x = [UIScreen mainScreen].bounds.size.width;
CGFloat y = [UIScreen mainScreen].bounds.size.height;
不是来自UIView尚未存在的界限,而是来自UIScreen。