1

我的故事板上有这个 UIPickerView :

在此处输入图像描述

这是基于 Size Inspector 的位置:

在此处输入图像描述

这是我的代码:

- (void)showPickerView
{
    [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        self.picker.frame = CGRectMake(0 , 288,  self.picker.frame.size.width,  self.picker.frame.size.height);
        self.picker.hidden = NO;
    }
    completion:^(BOOL finished) {
    }];
}

(经过反复试验)为了在 4 英寸屏幕上正确放置(底部),我必须将 288 设置为 Y。我不知道这个数字来自哪里。

因为如果你在这里做一些数学运算,你不会得到那个数字:

iPhone 屏幕高度 = 1136px,pickerview 高度 = 216pts = 432px

如果 X 和 Y 从 TOP-LEFT (0, 0) 测量,那么对于 4 英寸屏幕,我应该使用 1136 - 432 = 704 px / 2 = 352pts。不是288分。

但根据 Size Inspector 的原点,这个物体是从左下角开始测量的。因此,现在从左下角测量 X 和 Y 的 (0,0)。你仍然不会得到那个号码。

另外,更糟糕的是……当我在 3.5 英寸模拟器上运行时,它没有完全显示出来。

如何为 UIPickerView 提供 X 和 Y 值,以便在 3.5 和 4 英寸视网膜显示屏上完美显示?

谢谢你。

4

3 回答 3

2

大小1136px是全屏的,你必须考虑到状态栏有 20px 和导航栏有 44px 所以你的计算是这样的:

1136px - 432(picker) - 40(status bar) - 88(navigation bar) = 576; 576/2 = 288px

这就是为什么 288px 适合您的原因。

如果您想为您的选择器视图提供适当的坐标,您必须执行以下操作:

        self.picker.hidden = NO;
 [UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        self.picker.frame = CGRectMake(0 , 
                                      self.view.fra.size.height 
                                        -  self.picker.frame.size.height,
                                      self.picker.frame.size.width,  
                                      self.picker.frame.size.height);
    }
    completion:^(BOOL finished) {
    }];

但要小心,当你调用它时,它非常重要,确保你调用它或在调用它之后调用它-viewDidAppear:。由于您希望这段代码在 3.5 英寸和 4 英寸屏幕上都能完美运行,因此在调用此方法之前,视图不会正确调整大小并且框架不正确,特别是如果您使用带有或的情节提要xib 创建具有 4 英寸显示视图的视图控制器。

于 2013-09-13T07:46:38.557 回答
1

罗伯特,UIPicker 的位置总是从左上角开始测量, UIPicker 的坐标是中心的坐标uipicker

例如,如果您给出 (0,0),它将向您显示pickerview 的四分之一,即右下角。

由于 uipicker 高度固定为 216,因此您需要 Y c0 坐标大于 or=216/2=108。要查看全宽,您需要 X 坐标(选择器宽度/2)

于 2013-09-13T07:43:51.837 回答
1

我认为最好的方法是使用包含视图的 bounds 属性,它应该是视图控制器的根视图。

UIPickerView 高度为 216 像素,如本文所示-值在初始化 Picker 视图时默认设置。

因此,如果我们考虑 danypata 的帖子,但不想手动计算导航栏高度、状态栏高度等的设置值......我们可以执行以下操作:

UIPickerView *pickerView = [[UIPickerView alloc] init]; // default frame is set
float pvHeight = pickerView.frame.size.height;
float y = view.bounds.size.height - pvHeight; // the root view of view controller
[UIView animateWithDuration:0.5f delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
    self.picker.frame = CGRectMake(0 , y, pickerView.frame.size.width, pvHeight);
}
completion:nil];
于 2013-09-13T08:01:21.920 回答