在 iOS7 之前,我为 UIView 的框架定义的任何 CGRect 都可以正常工作。
例如:
imageView.frame=CGRectMake(20,20,80,80);
完美地在屏幕左上角留下了 20 x 20 的边距。
有趣的是,如果我添加另一个 UIView:
nextView.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+10,20,100,100);
nextView 出现在 imageView 附近,因此它以某种方式接受第二个视图的 X 参数,但它也不接受该视图的 Y 坐标。
现在,我必须使用viewWillLayoutSubviews
来安排所有这些坐标。否则,例如,frame forimageView
会0,0,80,80
自动变为。(它捕捉到左上角)
我没有使用任何笔尖,我什至还尝试UIViewController
使用自定义initWithFrame
方法进行创建以设置CGRect
之前loadView
或viewDidLoad
但没关系。
是否有自动覆盖视图的 x,y 的东西?像自动布局系统等?我不想使用viewWillLayoutSubviews
方法重新排列所有这些坐标。
这里发生了什么?
更新 1
- (id)initWithFrame:(CGRect) frame
{
self = [super init];
if (self) {
self.frame=frame; //frame is custom variable to hold it until loadViews method
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
-(void)loadView{
UIView *view=[[UIView alloc]initWithFrame:_frame];
view.backgroundColor=[UIColor blackColor];
self.imageView=[[UIImageView alloc]initWithFrame:CGRectMake(20, 20, 80,80)];
self.imageView.backgroundColor=[UIColor redColor];
[view addSubview:_imageView];
self.textView=[[UITextView alloc]initWithFrame:CGRectMake(self.imageView.frame.origin.x+self.imageView.frame.size.width+10, self.imageView.frame.origin.y, view.frame.size.width-20-(self.imageView.frame.origin.x+self.imageView.frame.size.width+10), view.frame.size.height-self.imageView.frame.origin.y-20)];
[view addSubview:_textView];
self.view=view;
}
我在 initWithFrame 和 viewDidLoad 中尝试了类似的代码。结果是一样的。
更新 2
我在问题中错误地写了“layoutSubviews”而不是“viewWillLayoutSubviews”,所以我修复了它:我不是在创建自定义 UIView 而是 UIViewController,所以在问题中它必须是“viewWillLayoutSubviews”。