iOS故事板,布局在4.0英寸屏幕尺寸和3.5英寸屏幕尺寸之间笨拙地移动

时间:2013-12-08 15:55:44

标签: ios storyboard autolayout

我在应用屏幕尺寸方面遇到问题。我关闭了自动布局,这样就不会弄乱屏幕上的元素。

但是现在当我尝试为3.5英寸的屏幕创建一个这样的简单屏幕时:

3.5 inch view

但是当我在一个4英寸的屏幕上看到相同的布局时,它看起来像是这样的间距搞得一团糟:

4.0 inchview

我不明白我在这里做错了什么。如何在3.5英寸和4.0英寸屏幕上创建看起来相同的屏幕?

谢谢!

4 个答案:

答案 0 :(得分:4)

Autolayout从Xcode 4.x向前迈出了巨大的一步。其中一件事是Apple听取了开发人员的意见:现在默认自动布局不再创建任何自动约束。这意味着:当你拉入所有控件时,你有一个完整的静态布局(带有绝对坐标)(你可以在任何时间点轻松地删除所有的约束,以回到那个状态。)。建议的工作流程是从那时起逐个添加约束。这导致了任何州的开发者方面的完全控制。

那就是说。 我的建议是:打开自动布局。然后将所有控件放到3.5屏幕上的静态位置。如果你不想支持肖像/风景或iPhone / iPad,那么就不要添加任何约束。而且你已经完成了,因为适用于3.5 screeen的静态布局也适用于4.0屏幕。

一旦您想要支持具有相同场景的iPad或横向模式,请逐个添加约束。真的行。自动布局现在是你的朋友(从Xcode 5开始)。相信我。

答案 1 :(得分:2)

选择你的UITableView,然后在Size Inspector中,激活所有自动调整箭头和线条,确保你的tableview是顶视图(在你的UIViewController视图中)。 enter image description here

答案 2 :(得分:2)

如果您不想处理自动布局,请转到尺寸检查器并将自动调整更改为:enter image description here

答案 3 :(得分:1)

非常常见的问题我和我的每个应用都遇到过这个问题。

您有两个选择

  1. 在您的故事板中,您可以从一个欢迎屏幕视图控制器中拥有两个分支。一个brach将拥有4in大小的所有控制器,而另一个将具有3.5in控制器。回到这种方式是你在故事板中为自己创造了两倍的工作。
  2. 你就是这样做的

    • 如图所示创建布局
    • 添加两个按钮并以模态方式将它们附加到这些视图。
    • 更改故事板为每个按钮将标识符设置为“iphone4”和“iphone5”。
    • 使按钮真的很小1px / 1px并隐藏它们。删除所有默认文本。
    • 添加此代码

    enter image description here enter image description here

    你的* .h

    中的

    #import <UIKit/UIKit.h>
    
    @interface v2ViewController : UIViewController
    {
        NSTimer *timer1;
        NSTimer *timer2;
    
    }
    
    @property (nonatomic, retain) NSTimer *timer1;
    @property (nonatomic, retain) NSTimer *timer2;
    

    在* .m中添加此

    @synthesize timer1;
    @synthesize timer2;
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    
        timer2 = [NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(moveOn) userInfo:nil repeats:NO];
    
    }
    
    - (IBAction) moveOn
    {
        //Now go to the Display Call Page
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        {
            CGSize result = [[UIScreen mainScreen] bounds].size;
            if(result.height == 480)
            {
                // iPhone Classic
                [self performSegueWithIdentifier:@"iphone4" sender:nil];
            }
            if(result.height == 568)
            {
                // iPhone 5
               [self performSegueWithIdentifier:@"iphone5" sender:nil];
            }
        }
    
    }
    
    1. 第二个选项是添加相应调整所有视图,按钮等大小的代码。您需要将所有内容附加到IBOutLet,然后执行此操作。 (抱歉,但我不知道为什么#@!$代码格式化不起作用)
    2. if(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone)             {                 CGSize result = [[UIScreen mainScreen] bounds] .size;                 if(result.height == 480)                 {                     // iPhone Classic                     [weatherBGImageVw setFrame:CGRectMake(0,0,320,480)];                 }                 if(result.height == 568)                 {                     // iphone 5                     [weatherBGImageVw setFrame:CGRectMake(0,0,320,568)];                 }             }