2009-05-25 47 views
23

我想在我的iPhone应用程序中降低UIPickerView的高度,以便它只显示一行和一列。选取器视图的高度应等于一行的高度。如何缩小iPhone上的UIPickerView?

我使用界面生成器来构建UIPickerView,但我找不到一个简单的方法来重新调整此控件的大小。

如何缩小UIPickerView

+0

尝试一个UIScrollView并在didScroll:委托的方法做捕捉如果滚动速度降至低于阈值。 – Dimitris 2010-07-16 22:37:57

回答

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会导致不需要的绘图工件。

但是,通过创建自定义控件,最适合您寻找的调整大小。

+5

+1我从未想过将转换应用于超级视图!我一直试图将其应用于pickerview,但效果不理想。如果可以的话,我会加倍投票。 – 2009-10-23 04:09:43

+0

旋转后,我失去了将触摸事件发送到PickerView的能力。思考? – Mark 2010-10-23 12:31:27

+1

@mark - 你确定拾取器及其周围视图是否仍在其包含视图的范围之内?如果他们在超级视图之外,触摸事件将不会触及他们。 – 2010-10-24 04:14:44

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中只有几行,使用a。
如果在tableView中有很多行,但只有其中一个需要选取器,请使用b。
如果你在tableView中有很多行,并且它们中的很多需要选择器,请使用c。

+0

有没有一种方法可以创建一个下拉选择器,就像我们在网页中看到的那样 – 2009-05-25 09:27:23

+0

在网页中,下拉列表最初是由Windows平台上的其他工具创建的。 Safari会添加一个独特的控件以查看dropDownList,但Apple不会将其添加到xcode。 – 2009-05-25 09:45:54

3

这是可能的,很容易!

只要打开笔尖文件为纯文本,然后找到选择器查看和调整措施:

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

这一切!

1

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

1

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

  1. 地方与尺寸的另一容器视图pickerview你希望它Place a pickerview into another container view

  2. 检查clipSubviews的容器视图

  3. 对准在容器视图水平和垂直居中的选择器,也给零尾随和领导地点零约束

通过这种方式,选取器视图被剪裁到正确的大小(不会调整大小)。

结果: enter image description here