我已经以编程方式添加了一个文本框。我的代码如下:
t = [[UITextField alloc] init];
[t setFrame:CGRectMake(55,200,200,50)];
[self.view addSubview:t];
当我在iPhone模拟器上运行它时,它完美运行(文本字段位于我想要的确切位置),但是当我在iPad上运行时,位置不合适。我认为当屏幕尺寸增大/减小时它会自动调整它。我怎么纠正这个?
注意:我不打算使用界面构建器或故事板。
答案 0 :(得分:1)
设置绝对值的工作方式与预期一致。这就是为什么称为绝对值。问题是灵活/动态的价值。
在您告诉它之前,它不会自动调整。您可以选择以下选项:
手动检查用户界面习语并设置两个不同的值。这是检测iPhone和iPad UI的正确方法:
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) ...
(为此创建一些功能。)
根据屏幕或超级浏览尺寸计算值:
CGSize screen = [[UIScreen mainScreen] bounds].size;
frame.size.width = screen.width / 2 - 40;
设置自动调整大小屏幕,当superview更改大小时,会调整当前子视图的设置规则的大小:
view.autoresizingMask = UIViewAutoresizingMaskFlexibleWidth;
必须与某些固定或计算的帧值组合。仅当视图调整大小时,自动调整才有用,而不是在您第一次设置时,因此这不是您的情况。有关其工作原理的完整说明,请参阅UIView
文档。
使用自动布局,这是一个功能强大但对动态布局非常复杂的解决方案。首先,您需要阅读并尝试完全了解如何使用它。
如果您有一个视图,其大小和位置无法用某种规则描述,您必须直接写入坐标(选项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];
希望这会对你有所帮助。