你如何缩小iPhone上的UIPickerView?

时间:2009-05-25 09:01:34

标签: ios interface-builder uipickerview picker

我想降低iPhone应用中UIPickerView的高度,以便它只显示一行和一列。拾取器视图的高度应该等于行的高度。

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

如何缩小UIPickerView

5 个答案:

答案 0 :(得分: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会导致不合需要的绘图工件。

但是,通过创建自定义控件可以最好地满足您正在寻找的调整大小。

答案 1 :(得分: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>

这就是全部!

答案 2 :(得分:1)

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

a)UITableView+UIPickerView
我建议您使用“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中只有几行,请使用。
如果tableView中有很多行,但只有一行需要选择器,请使用b。
如果tableView中有很多行,并且很多行需要选择器,请使用c。

答案 3 :(得分:1)

在Interface Builder中创建一个简单的UIView。设置所需的位置和大小,添加约束。选中“Clip SubViews”复选框。然后拖动&amp; drop Picker在此视图中查看为子视图。为拾取器添加约束以在容器内水平和垂直对齐。应该做的工作。

答案 4 :(得分:1)

The answer of user2248258 actually works if you use storyboards and/or autolayout. There I would like to add screenshots as Nilambar suggested.

  1. place a pickerview in another container view with the size you want it Place a pickerview into another container view

  2. check clipSubviews for the container view

  3. align the picker centered horizontally and vertically in that container view, also give it zero constraints for the trailing and leading place

This way the picker view gets clipped off to the correct size (won't be resized).

Result: enter image description here