Ste*_*eld 113 iphone cocoa-touch uipickerview uikit ios
是否可以更改UIPickerView的高度?某些应用程序似乎有较短的PickerViews,但设置较小的框架似乎不起作用,框架在Interface Builder中被锁定.
dan*_*ass 54
很明显Apple没有特别邀请默认高度UIPickerView
,但我发现你可以通过完全控制并在创建时传递所需的帧大小来实现视图高度的变化,例如:
smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
你会发现,在不同的高度和宽度,有视觉故障.显然,这些故障要么需要以某种方式解决,要么选择另一种不显示它们的尺寸.
bha*_*inb 46
上述方法都不适用于iOS 4.0
pickerView的高度不再重新调整大小.如果您尝试在4.0中更改选择器的框架,则会有一条消息被转储到控制台:
-[UIPickerView setFrame:]: invalid height value 66.0 pinned to 162.0
Run Code Online (Sandbox Code Playgroud)
我最终做了一些相当激进的事情,以获得一个适用于OS 3.xx和OS 4.0的较小选择器的效果.我把选择器留给了SDK决定它应该是什么尺寸,而是在我的背景图像上做了一个直通透明窗口,拾取器变得可见.然后简单地将拾取器放在后面(Z顺序)我的背景UIImageView,这样只有一部分拾取器可见,这是由我背景中的透明窗口决定的.
小智 43
只有三个有效的高度UIPickerView (162.0, 180.0 and 216.0)
.
您可以使用CGAffineTransformMakeTranslation
和CGAffineTransformMakeScale
功能将拾取器正确安装到您的方便.
例:
CGAffineTransform t0 = CGAffineTransformMakeTranslation (0, pickerview.bounds.size.height/2);
CGAffineTransform s0 = CGAffineTransformMakeScale (1.0, 0.5);
CGAffineTransform t1 = CGAffineTransformMakeTranslation (0, -pickerview.bounds.size.height/2);
pickerview.transform = CGAffineTransformConcat (t0, CGAffineTransformConcat(s0, t1));
Run Code Online (Sandbox Code Playgroud)
上面的代码将拾取器视图的高度更改为一半,并将其重新定位到精确(Left-x1,Top-y1)位置.
vij*_*ari 40
尝试:
pickerview.transform = CGAffineTransformMakeScale(.5, 0.5);
Run Code Online (Sandbox Code Playgroud)
mmo*_*ris 25
在iOS 4.2和4.3中,以下工作:
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.frame = CGRectMake(0, 0, 320, 180);
[self addSubview:datePicker];
Run Code Online (Sandbox Code Playgroud)
以下不起作用:
UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 180)];
[self addSubview:datePicker];
Run Code Online (Sandbox Code Playgroud)
我有一个应用程序商店的应用程序与3行日期选择器.我认为可能已经阻止了高度变化,因为您在日期选择器的边框下看到了文本,但这也发生在正常的216高度日期选择器上.
哪个是bug?你的猜测和我的一样好.
UIDatePicker
(和UIPickerView
)162.0,180.0和216.0 也有3个有效高度.如果您将UIPickerView
高度设置为其他任何内容,则在iOS设备上进行调试时,您将在控制台中看到以下内容.
2011-09-14 10:06:56.180 DebugHarness[1717:707] -[UIPickerView setFrame:]: invalid height value 300.0 pinned to 216.0
Run Code Online (Sandbox Code Playgroud)
小智 10
我发现您可以编辑UIPickerView的大小 - 而不是使用界面构建器.使用文本编辑器打开.xib文件,并将选择器视图的大小设置为您想要的任何值.接口构建器不会重置大小,它似乎工作.我确定苹果锁定了尺寸是有原因的,所以你必须尝试不同的尺寸才能看到它有效.
UIPickerView
表现得像它应该的样子UIViewController
viewWillLayoutSubviews
重新缩放/定位UIPickerView
UIPopover
UIPickerView
pickerView viewForRow
撤消子视图的转换子类UIPickerView并使用以下代码覆盖这两个方法.它结合了子类化,固定高度和转换方法.
#define FIXED_PICKER_HEIGHT 216.0f
- (void) setFrame:(CGRect)frame
{
CGFloat targetHeight = frame.size.height;
CGFloat scaleFactor = targetHeight / FIXED_PICKER_HEIGHT;
frame.size.height = FIXED_PICKER_HEIGHT;//fake normal conditions for super
self.transform = CGAffineTransformIdentity;//fake normal conditions for super
[super setFrame:frame];
frame.size.height = targetHeight;
CGFloat dX=self.bounds.size.width/2, dY=self.bounds.size.height/2;
self.transform = CGAffineTransformTranslate(CGAffineTransformScale(CGAffineTransformMakeTranslation(-dX, -dY), 1, scaleFactor), dX, dY);
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
//Your code goes here
CGFloat inverseScaleFactor = FIXED_PICKER_HEIGHT/self.frame.size.height;
CGAffineTransform scale = CGAffineTransformMakeScale(1, inverseScaleFactor);
view.transform = scale;
return view;
}
Run Code Online (Sandbox Code Playgroud)
更改选取器视图的可见高度的简单方法是将选取器嵌入到UIView中,将父视图的高度调整为要查看选取器的高度,然后在父UIView上的Interface Builder中启用"剪辑子视图"或view.clipsToBounds = true
在代码中设置.
我无法遵循上述任何建议.
我看过多个教程,发现这个教程最有益:
我添加了以下代码来设置"viewDidLoad"方法中的新高度,该方法适用于我的应用程序.
UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
[self.view addSubview:picker];
picker.delegate = self;
picker.dataSource = self;
Run Code Online (Sandbox Code Playgroud)
希望这有用!
这在 iOS 9 中发生了很大变化(在 iOS 8 中它与我们在这里看到的非常相似)。如果您负担得起只针对 iOS 9,那么您UIPickerView
可以通过设置其框架来根据需要调整其大小。好的!
这是来自iOS 9 发行说明
UIPickerView 和 UIDatePicker 现在可以调整大小和自适应——以前,即使您尝试调整它们的大小,这些视图也会强制执行默认大小。这些视图现在在所有设备上也默认为 320 磅的宽度,而不是 iPhone 上的设备宽度。
在为 iOS 9 编译时,依赖于旧的默认大小强制实施的接口可能看起来是错误的。遇到的任何问题都可以通过将选择器视图完全限制或调整为所需大小来解决,而不是依赖于隐式行为。
归档时间: |
|
查看次数: |
133325 次 |
最近记录: |