UIPicker 在横向模式下调整大小

Posted

技术标签:

【中文标题】UIPicker 在横向模式下调整大小【英文标题】:UIPicker sizing in landscape mode 【发布时间】:2009-02-11 02:15:16 【问题描述】:

我正在尝试使用 UIPicker 在横向模式下开发应用程序,占用(几乎)屏幕的整个宽度(包含 5 或 6 个组件)。你能告诉我如何设置 UIPicker 的大小吗?非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

实际上,我几乎为每个应用调整了我的选择器的大小。我不喜欢它们占据整个屏幕。这是我正在使用的方法:(请注意,我还将选择器旋转为水平)

在 viewDidLoad .....

picker = [[UIPickerView alloc] initWithFrame:CGRectZero];
picker.delegate = self;
picker.dataSource = self;
picker.showsSelectionIndicator = NO;


//Resize the picker, rotate it so that it is horizontal and set its position
CGAffineTransform rotate = CGAffineTransformMakeRotation(-1.57);  
rotate = CGAffineTransformScale(rotate, .46, 2.25);
CGAffineTransform t0 = CGAffineTransformMakeTranslation(3, 22.5);
picker.transform = CGAffineTransformConcat(rotate,t0);
[self.view addSubview:picker];
[picker release];

然后,我想为我的视图添加一个背景图像,以覆盖 UIPicker 的灰色条(现在位于顶部和底部):

//Create the overlay to superimpose ontop of the picker
//In this case, the image is the size of the screen with a transparent area the size of the //UIPickerView cut out in the middle

UIImageView *uiiv = [[UIImageView alloc] 
                     initWithImage:[UIImage                                 imageNamed:@"problem_bg.png"]];
uiiv.userInteractionEnabled = NO;
uiiv.opaque = YES; //for performance
[self.view addSubview:uiiv];
[uiiv release];

UIPickerView 委托方法:

-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)rowforComponent:(NSInteger)component reusingView:(UIView *)view
 

    UIView *viewForRow = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 280)] autorelease];
    UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myimage.png"]];

    img.frame = CGRectMake(0, 0, 102,280);
    img.opaque = YES;
    [viewForRow addSubview:img];
    [img release];
    UILabel *label;

    UIFont *font = [ UIFont fontWithName:@"Helvetica"  size:20];

    label = [[[UILabel alloc] initWithFrame:CGRectMake(10, 20, 270, 100)] autorelease];

    label.text = @"I am a label";
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor blackColor];
    label.font = font;
    label.backgroundColor = [UIColor clearColor];
    label.opaque = NO;
        [viewForRow addSubview:label];

    CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57);  
        [viewForRow setTransform:rotate]; 
    return viewForRow;


这提供了一个更小、具有漂亮外观和感觉的水平选择器。我希望这对某人有所帮助。

【讨论】:

【参考方案2】:

您可以通过在 TextEdit 中打开 .xib 文件并更改 UIPickerView 的大小来编辑大小。

【讨论】:

【参考方案3】:

你不能。 UIPickerView 的大小是不变的。

更新:事实证明您可以调整 UIPickerView 的大小。诀窍是将它放在另一个(较小的)UIView 中,并调整该视图的大小。我还没试过。

更新 2: 此方法不会调整 UIPickerView 的大小,而是裁剪它。它可能是也可能不是您正在寻找的东西,但是 AFAIK,没有办法真正调整 UIPickerView 的大小,这已经很接近了。它看起来那么不好。

更新 3(姗姗来迟):从 SDK 3.0 开始,UIPickerView 可以使用 initWithFrame 或 setFrame 完全调整大小。

【讨论】:

【参考方案4】:

我在调整pickerview 的大小时遇到​​了同样的问题。经过一些研究和头痛后,您可以轻松做到:

    忘记界面生成器!我认为你可以没有更好的用户界面 界面构建器。

    在您的控制器中覆盖加载视图方法。

    -(void)loadView
    
            //create your view
     self.view = [[UIView alloc] initWithFrame:CGRectZero];
     // create a default sized pickerView
     pickerView = [[UIPickerView alloc] initWithFrame:CGRectZero];
     pickerView.delegate = self;
     pickerView.dataSource = self;
     pickerView.showsSelectionIndicator = YES;
    
      // Get its frame
     CGRect pickerFrame = pickerView.frame;
    
       // Set it to what ever you like, I use a default screen height times a shrink factor like 0.75 for 3/4 of its original size
     pickerFrame.size.width = screenWidth*pickerShrinkFactor;
     pickerFrame.size.height =  pickerHeight*pickerShrinkFactor;
     // You can also set the upper left corner of the picker
     pickerFrame.origin.x = 0;
     // Set the picker frame to new size and origin
            pickerView.frame = pickerFrame;
            // Add it to your view
     [self.view addSubview:pickerView];
    
    
    

祝你好运

【讨论】:

【参考方案5】:

我相当确定 UIPicker 有一种尺寸,您无法更改。有兴趣听到不同的声音。

【讨论】:

【参考方案6】:

答案在:

-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 

由于:

- (NSString*)pickerView:(UIPickerView*)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component

当然是让它工作(即:横向缩放标签)

【讨论】:

【参考方案7】:

没问题(我刚刚注册)。顺便说一句,我刚刚意识到,当我发布我的答案时,(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent .... 方法丢失了 row 和 forComponent 之间的空间。因此,请确保您的委托正确,否则它将无法正常工作。

【讨论】:

以上是关于UIPicker 在横向模式下调整大小的主要内容,如果未能解决你的问题,请参考以下文章

为纵向和横向模式调整 UIImage 的大小

横向调整内容 UITableviewcell 的大小

如何防止在横向上自动调整 UINavigationBar 的大小

自动布局可以调整 UITableView 的大小以在 ipad 上纵向增长和横向缩小吗?

添加子视图时,如果应用程序处于横向模式,则视图不会调整大小

纵向模式和横向模式视图显示调整与手机大小