如何将子视图放在不同屏幕的正确位置

时间:2013-10-30 17:31:38

标签: ios iphone objective-c uikit autolayout

我正在开发一个ViewController,其中一些UI元素为SubViews但是当我在不同设备上运行应用时,我遇到了这些元素的问题。我正在通过代码做所有事情。我应该使用AutoLayout吗?我应该如何为这些元素使用autolayout?

iphone5 (4 inches)

iphone 4 (3.5 inches)

我有这些项目:

    titleLbl = [[WPCustomLabel alloc] initWithFrame:CGRectMake(30, self.view.frame.size.height/2, 260, 25)];
    [titleLbl setFont:[UIFont systemFontOfSize:18]];
    [self.view addSubview:titleLbl];

    NSLog(@"%f", self.view.bounds.size.height/2);


    textLbl = [[WPCustomLabel alloc] initWithFrame:CGRectMake(40, self.view.frame.size.width/2 + 10, 250, 230)];
    [textLbl setTextAlignment:NSTextAlignmentJustified];
    [self.view addSubview:textLbl];


    omitBtn = [[WPCustomButton alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height-108 , self.view.bounds.size.width/2, 44)];
    [omitBtn setTitle:@"Omitir" forState:UIControlStateNormal];
    [omitBtn addTarget:self action:@selector(omitInfo) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:omitBtn];


    nextBtn = [[WPCustomButton alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height-108, self.view.frame.size.width/2, 44)];
    [nextBtn setTitle:@"Siguiente" forState:UIControlStateNormal];
    [nextBtn addTarget:self action:@selector(omitInfo) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:nextBtn];

2 个答案:

答案 0 :(得分:-1)

如果您使用的是故事板,那么您应该使用自动布局。只需在标签和超视图底部之间设置约束。

enter image description here

如果您不使用故事板,可以覆盖viewWillLayoutSubviews并根据视图大小设置布局。

答案 1 :(得分:-2)

我个人建议不要使用自动布局但使用此代码

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) {
    if ([[UIScreen mainScreen] bounds].size.height == 480) {
        //iPhone 4
    }else{
        //iPhone 
    }
}else{
    //iPad
}

将此代码分别定义为All object frame。