Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone 5的iOS按钮定位_Ios_Objective C_Uibutton_Uistoryboard_Iphone 5 - Fatal编程技术网

iPhone 5的iOS按钮定位

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模拟器上运行

我的应用程序由三个按钮组成,它们是我通过编程创建的,位于导航栏的正下方。我遇到的问题是,当我在模拟器中运行我的应用程序时,这些按钮在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;