0

在 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 forimageView0,0,80,80自动变为。(它捕捉到左上角)

我没有使用任何笔尖,我什至还尝试UIViewController使用自定义initWithFrame方法进行创建以设置CGRect之前loadViewviewDidLoad但没关系。

是否有自动覆盖视图的 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”。

4

2 回答 2

0

我的猜测是您将状态栏反转为左上角,但在 iOS7 中,状态是透明的,顶部是屏幕的实际左上角。

您可以更改坐标或将其添加到视图控制器:

 if([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
    {
        [self setEdgesForExtendedLayout:UIRectEdgeNone];
    }

这会将您的左上角重置为状态栏的底部。

无论如何,我相信将您的布局代码放在这些方法中:

- (void)viewWillLayoutSubviews 
- (void)viewDidLayoutSubviews
于 2014-01-08T12:45:56.597 回答
0

每当添加子视图时,都会滚动 UIScrollView,为 View 设置 Frame,layoutSubViews?叫做,

于 2014-01-08T13:35:54.253 回答