Iphone 如何使UIPickerView具有3个可见行?
如何使uipickerview只有3行可见?像这样: 尝试以下代码-Iphone 如何使UIPickerView具有3个可见行?,iphone,ios,objective-c,uipickerview,Iphone,Ios,Objective C,Uipickerview,如何使uipickerview只有3行可见?像这样: 尝试以下代码- #pragma mark - picker datasource methods -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInC
#pragma mark - picker datasource methods
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return 3;
}
#pragma mark - picker delegate
-(NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [YourArray objectAtIndex:row];//your array that contains data
}
请尝试以下代码:
//Method to define how many columns/dials to show
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 3;
}
// Method to define the numberOfRows in a component using the array.
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent :(NSInteger)component
{
if (component==0)
{
return [arrFirst count];
}
else if (component==1)
{
return [arrSecond count];
}
else
{
return [arrThird count];
}
}
// Method to show the title of row for a component.
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
switch (component)
{
case 0:
return [arrFirst objectAtIndex:row];
break;
case 1:
return [arrSecond objectAtIndex:row];
break;
case 2:
return [arrThird objectAtIndex:row];
break;
}
return nil;
}
谢谢,如果您有任何问题,请告诉我。您必须以编程方式添加UIDatePicker以显示三行。根据需要调整选择器大小
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.frame = CGRectMake(0, 160, 320, 160);
datePicker.datePickerMode=UIDatePickerModeDate;
[self.view addSubview:datePicker];
我注意到,大多数回答都提到了UIDatePicker或组件的数量,这两个问题似乎都不正确,因为问题专门询问了UIPickerView和可见的行的数量 我通过实施以下措施找到了解决方案:
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
return (80.0);
}
这允许您将行的高度设置为更大(或更小),以便在控件中显示更少(或更多)行,尽管控件的垂直大小相同
我相信可以更改控件的大小以避免所有多余的间距,但我还没有解决这个问题
行高25.0
行高80.0
除了@GRW的答案之外。因此,不能为选择器视图设置任意高度;但您可以:将行高度更改为有3个可见行;并应用仿射变换缩小整个选取器视图 要保持纵横比,请执行以下操作:
- 您不仅必须缩放y,还必须使用相同的比例因子缩放x李>
- 将-pickerView:widthForComponent:除以比例因子李>
- 将-pickerView:rowHeightForComponent:除以比例因子李>
- 如果组件行中有标签/文本,则字体大小也必须除以系数
(使用的比例因子为0.5)我对本地化不是很确定,您需要将适当的日期模式设置为
UIDatePicker
[datePicker setDatePickerMode:UIDatePickerModeandTime]代码>否。。。我的意思是如何使3行可见,而不是列..行!通常uipickerview有5个可见行。但是这个例子只有3个。。。他们是怎么做到的?不。。。请注意,通常pickerView有5个可见行!!!这个例子只有3个。。。他们是如何做到的?我发现,通过完全控制并在创建时传递所需的帧大小,可以实现视图高度的更改,例如:您需要通过编程方式设置高度,如:ObjPicker=[[UIPickerView alloc]initWithFrame:CGRectMake(0.0,0.0,320.0,120.0)];对非常感谢。在这种情况下,我可以为pickerview-162设置最小高度。而界面生成器使大小只有216。。。再次感谢!对不起,我不能。我的声誉只有3。感谢您明确表示,没有简单的方法可以将所需的大小设置为pickerView。事实上,datePicker与这个问题无关
// consider
CGFloat _scaleFactor = 0.5;
- (void)viewDidLoad
{
[super viewDidLoad];
self.pickerView.transform = CGAffineTransformMakeScale(_scaleFactor, _scaleFactor);
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
return desiredHeight / _scaleFactor;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;
{
return desiredWidth / _scaleFactor;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
return desiredHeight / _scaleFactor;
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row
forComponent:(NSInteger)component reusingView:(UIView *)view
{
UILabel *label = (UILabel *)view;
if (!label) {
label = [[UILabel alloc] init];
CGFloat desiredFontSize;
label.font = [UIFont systemFontOfSize:(desiredFontSize / _scaleFactor)];
}
// set text from data source
return label;
}