Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何使UIPickerView具有3个可见行?_Iphone_Ios_Objective C_Uipickerview - Fatal编程技术网

Iphone 如何使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

如何使uipickerview只有3行可见?像这样:

尝试以下代码-

#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;
}