23

我想UIPickerView在我的 iPhone 应用程序中降低 a 的高度,以便它只显示一行和一列。选择器视图的高度应该等于一行的高度。

我正在使用 Interface Builder 来构造UIPickerView,但我找不到重新调整此控件大小的简单方法。

你怎么缩小一个UIPickerView

4

5 回答 5

52

实际上,您可以通过对封闭视图应用仿射变换来稍微缩小整个 UIPickerView。例如:

CGSize pickerSize = [pickerView sizeThatFits:CGSizeZero];

pickerTransformView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, pickerSize.width, pickerSize.height)];
pickerTransformView.transform = CGAffineTransformMakeScale(0.75f, 0.75f);

[pickerTransformView addSubview:pickerView];
[self.view addSubview:pickerTransformView];
[pickerTransformView release];

通过将选取器放置在包含视图中并将缩放变换应用于该视图,将选取器缩放到其原始大小的 75%。将转换直接应用于 UIPickerView 会导致不良的绘图伪影。

但是,您正在寻找的调整大小最好通过创建自定义控件来实现。

于 2009-05-25T14:40:05.153 回答
3

这是可能的和容易的!

只需以纯文本格式打开 nib 文件,然后找到选取器视图并调整度量:

<object class="IBUIPickerView" id="783900772">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{85, 68}, {150, 116}}</string>

就这样!

于 2009-06-05T15:15:50.743 回答
2

如果您使用故事板和/或自动布局,则 user2248258 的答案实际上有效。在那里,我想按照 Nilambar 的建议添加屏幕截图。

  1. 在另一个容器视图中放置一个你想要的大小的选择器视图将pickerview放入另一个容器视图

  2. 检查容器视图的 clipSubviews

  3. 在该容器视图中将选择器水平和垂直居中对齐,同时为尾随和前导位置提供零约束

这样,选择器视图就会被剪裁到正确的大小(不会调整大小)。

结果: 在此处输入图像描述

于 2015-07-31T20:41:49.150 回答
1

据我所知,如果你缩小它会搞砸的。

a)UITableView+UIPickerView
我建议您使用“a row in”UITableView+UIPickerView来执行此操作。您可以在 tableView 中使用一行,就像 Windows 中的 dropDownList 一样,当您点击该行时,将显示 pickerView(起初隐藏)。

b) 如果 tableView 中的数据列表很长,并且只有一项需要选择数据,则应使用以下方法滚动视图(确保计算 pickerView 的原始位置,因为它会向上/向下移动一起):


-(void)setViewMove:(BOOL)moveUP offset:(CGFloat)offset
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    CGRect rect = self.view.frame;

    if(moveUP)
    {
        rect.origin.y-=offset;
        rect.size.height+=offset;
    }
    else    //move down
    {
        rect.origin.y+=offset;
        rect.size.height-=offset;
    }
    self.view.frame = rect;
    [UIView commitAnimations];
}

c) 您还可以为选取器添加另一个视图,并在您选择某些内容后返回此视图。

我的结论是:
如果 tableView 中只有几行,请使用 a.
如果 tableView 中有很多行但只有其中一个需要选择器,请使用 b。
如果您在 tableView 中有很多行并且其中很多需要选择器,请使用 c.

于 2009-05-25T09:22:54.233 回答
1

在 Interface Builder 中创建一个简单的 UIView。设置所需的位置和大小,添加约束。选中“剪辑子视图”复选框。然后将 Picker View 作为子视图拖放到此视图中。为选取器添加约束以在容器内水平和垂直对齐。应该做的工作。

于 2015-06-03T21:52:57.607 回答