为ui组件提供绝对值 - 对iPad不起作用

时间:2013-12-07 05:42:37

标签: ios iphone ipad

我已经以编程方式添加了一个文本框。我的代码如下:

t = [[UITextField alloc] init];
    [t setFrame:CGRectMake(55,200,200,50)];

    [self.view addSubview:t];

当我在iPhone模拟器上运行它时,它完美运行(文本字段位于我想要的确切位置),但是当我在iPad上运行时,位置不合适。我认为当屏幕尺寸增大/减小时它会自动调整它。我怎么纠正这个?

注意:我不打算使用界面构建器或故事板。

2 个答案:

答案 0 :(得分:1)

设置绝对值的工作方式与预期一致。这就是为什么称为绝对值。问题是灵活/动态的价值。

在您告诉它之前,它不会自动调整。您可以选择以下选项:

  1. 手动检查用户界面习语并设置两个不同的值。这是检测iPhone和iPad UI的正确方法:

    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) ...
    

    (为此创建一些功能。)

  2. 根据屏幕或超级浏览尺寸计算值

    CGSize screen = [[UIScreen mainScreen] bounds].size;
    frame.size.width = screen.width / 2 - 40;
    
  3. 设置自动调整大小屏幕,当superview更改大小时,会调整当前子视图的设置规则的大小:

    view.autoresizingMask = UIViewAutoresizingMaskFlexibleWidth;
    

    必须与某些固定或计算的帧值组合。仅当视图调整大小时,自动调整才有用,而不是在您第一次设置时,因此这不是您的情况。有关其工作原理的完整说明,请参阅UIView文档。

  4. 使用自动布局,这是一个功能强大但对动态布局非常复杂的解决方案。首先,您需要阅读并尝试完全了解如何使用它。

  5. 如果您有一个视图,其大小和位置无法用某种规则描述,您必须直接写入坐标(选项1)。

答案 1 :(得分:0)

如果你不习惯使用storyboard或xib文件,请使用下面的代码。

NSString *deviceType = [UIDevice currentDevice].model;
t = [[UITextField alloc] init];
if([deviceType isEqualToString:@"iPhone"]) // For iPhone
{
    [t setFrame:CGRectMake(55,200,200,50)];
}
else                                       // For iPad
{
    [t setFrame:CGRectMake(55,200,600,100)];
}
[self.view addSubview:t];

希望这会对你有所帮助。