iPhone 5的iOS按钮定位
我的应用程序由三个按钮组成,它们是我通过编程创建的,位于导航栏的正下方。我遇到的问题是,当我在模拟器中运行我的应用程序时,这些按钮在iPhone3.5中的位置非常合适然而,在新的更大的屏幕上,他们的位置下降了一点。在我的代码中,我使用self.view.frame.size.height-465作为我的y坐标,因此无论屏幕大小如何,按钮都位于正确的位置。我也没有启用任何自动调整大小的遮罩,因为我希望在视图大小改变时按钮处于相同的位置。你们认为我做错了什么,因为每当我在iphone 5模拟器上运行我的程序时,按钮都会稍微向下移动 编辑: 我现在把我的按钮的截图贴在两个屏幕上,这样你就知道我在说什么了iPhone 5的iOS按钮定位,ios,objective-c,uibutton,uistoryboard,iphone-5,Ios,Objective C,Uibutton,Uistoryboard,Iphone 5,我的应用程序由三个按钮组成,它们是我通过编程创建的,位于导航栏的正下方。我遇到的问题是,当我在模拟器中运行我的应用程序时,这些按钮在iPhone3.5中的位置非常合适然而,在新的更大的屏幕上,他们的位置下降了一点。在我的代码中,我使用self.view.frame.size.height-465作为我的y坐标,因此无论屏幕大小如何,按钮都位于正确的位置。我也没有启用任何自动调整大小的遮罩,因为我希望在视图大小改变时按钮处于相同的位置。你们认为我做错了什么,因为每当我在iphone 5模拟器上运行
您不应该在代码中执行任何操作。如果你把它放在导航栏的正下方,在IB中,它应该在两种屏幕大小中保持相同的距离(因为自动布局) 编辑后: 如果您没有使用自动布局,并且在代码中执行所有操作,那么您应该从顶部设置y值,而不是从高度-465。只需为y使用一个固定值。在下面的代码中,框架是在CustomButton的init方法中设置的,然后我只需更改其位置:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
CustomButton1 *button = [[CustomButton1 alloc] init];
[button addTarget:self action:@selector(doStuff:) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"test" forState:UIControlStateNormal];
button.center = CGPointMake(self.view.center.x, 30);
[self.view addSubview:button];
}
#定义为"IPHONE"5(晶圆((双)[[UIScreen mainScreen]边界].size.height-(双)568)
2.使用此代码
-(void)viewDidLoad {
if( IS_IPHONE_5 )
{
int newY=(self.view.frame.size.height +( 568-480) )-465;
[myButton setFrame:CGRectMake(0,newY,width,height);
}
else
{
int newY=(self.view.frame.size.height-465;
[myButton setFrame:CGRectMake(0,newY,width,height);
}
}
我强烈建议使用约束而不是框架。它会完全满足你的要求,而且会容易得多。您的代码可能看起来像
[self.superViewOfButton addSubview:self.button1];
[self.superViewOfButton addSubview:self.button2];
[self.superViewOfButton addSubview:self.button3];
NSDictionary *viewsDic = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:self.button1, self.button2, self.button3, nil]
forKeys:[NSArray arrayWithObjects:@"button1", @"button2", @"button3", nil]];
[self.superViewOfButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[button1]" options:0 metrics:0 views:viewsDic]];
[self.superViewOfButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[button1]" options:0 metrics:0 views:viewsDic]];
[self.superViewOfButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[button2]" options:0 metrics:0 views:viewsDic]];
[self.superViewOfButton addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[button2]" options:0 metrics:0 views:viewsDic]];
以下是可视化语法语言的链接:
并记住将所有控件设置为
button1.translatesAutoresizingMaskIntoConstraints = NO;
一开始看起来可能有点太多,但在阅读了大约五分钟后,它非常简单,使您的应用程序更加灵活。希望这有帮助。使用百分比,而不是硬编码的像素值。你的确切意思是什么?
self.view.frame.size.height-465
是的,有硬编码,但y坐标不应该根据屏幕大小改变吗?@iProgrammed我现在在我的原始帖子中添加了屏幕截图。等等,你是什么意思?我已经有了通过CGRectmake创建的按钮,我的问题是它的位置嗯,这将工作,但我正在寻找一个解决方案,我不需要这样做。我真正关心的是y坐标定位。如果你不使用自动布局,为什么不这样做最好。我已经有按钮在底部保持位置,我没有做任何不同于我现在正在做的事情。我没有使用自动布局,因为我需要向后兼容性,而且我正在生成按钮代码,IB中没有任何内容。嗯,如果使用固定的y坐标,那么当大小改变时,iOs真正的变化是什么。self.view.center.x返回一个点,对吗?@DavidWest,否,self.view.center.x返回一个CGFloat(center返回一个CGPoint)。一个固定的y坐标,与顶部的距离总是相同的,因为顶部的y坐标是0,所以你要在0上加一个固定的数字——屏幕大小根本不在其中。我的重点是这是必需的吗?在我的同一个应用程序中,我在底部有一些按钮,它们在没有任何类似代码的情况下正确定位。我不能使用约束,因为我需要我的应用程序与iOS5兼容。
button1.translatesAutoresizingMaskIntoConstraints = NO;