如何缩小iPhone上的UIPickerView?
我想在我的iPhone应用程序中降低UIPickerView
的高度,以便它只显示一行和一列。 选取器视图的高度应该等于一行的高度。
我正在使用Interface Builder来构buildUIPickerView
,但我找不到一个简单的方法来重新调整此控件的大小。
你如何缩小UIPickerView
?
实际上,通过对封闭视图应用仿射变换,可以稍微缩小整个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会导致不希望的绘制工件。
但是,通过创build自定义控件,可以更好地调整要查找的大小。
这是可能的,容易!
只要打开纯文本的nib文件,然后findselect器视图,并调整措施:
<object class="IBUIPickerView" id="783900772"> <reference key="NSNextResponder" ref="191373211"/> <int key="NSvFlags">292</int> <string key="NSFrame">{{85, 68}, {150, 116}}</string>
就这样!
据我所知,如果缩小它将会被搞乱。
a)UITableView + UIPickerView
我build议你使用“UITableView + UIPickerView”中的一行来做到这一点。 你可以在tableView中使用像Windows中的dropDownList一样的行,当你点击这行时将显示pickerView(首先隐藏)。
b)如果你在tableView中有很长的数据列表,并且只有其中一个项目需要select数据,你应该使用下面的方法滚动视图(确保计算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)您还可以为选取器添加另一个视图,并在select某个对象时返回到该视图。
我的结论是:
如果你在tableView只有几行,使用一个。
如果在tableView中有很多行,但只有其中一个需要select器,请使用b。
如果你在tableView中有很多行,并且很多需要select器,请使用c。
在Interface Builder中创build一个简单的UIView。 设置所需的位置和大小,添加约束。 选中“剪辑子视图”checkbox。 然后将该视图内的Picker View拖放到子视图中。 为拾取器添加约束以在容器内水平和垂直alignment。 应该做这个工作。
如果您使用故事板和/或自动布局,user2248258的答案实际上是有效的。 在那里,我想添加截图Nilambarbuild议。
-
在另一个容器视图中放置一个pickerview,使其具有所需的大小
-
检查容器视图的clipSubviews
-
在该容器视图中将拾取器水平和垂直居中alignment,也为尾随和引导位置给予零约束
通过这种方式,选取器视图被剪裁到正确的大小(不会resize)。
结果: