9

画面の幅全体(5つまたは6つのコンポーネント)を(ほぼ)占める、横向きモードのUIPickerを使用してアプリを開発しようとしています。UIPickerのサイズの設定方法を教えてください。ご助力ありがとうございます。

4

7 に答える 7

9

実際、ほぼすべてのアプリでピッカーのサイズを変更しています。画面全体を占めるのは好きではありません。これが私が使用している方法です:(ピッカーを水平になるように回転させていることに注意してください)

ビューでDidLoad .....

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;

}

これにより、見栄えの良い、はるかに小さい水平ピッカーが得られます。これが誰かに役立つことを願っています。

于 2009-09-14T06:03:43.570 に答える
4

できません。UIPickerViewのサイズは一定です。

更新: UIPickerViewのサイズを変更できることがわかりました。秘訣は、それを別の(小さい)UIView内に配置し、そのビューのサイズを変更することです。私はまだこれを試していません。

更新2:このメソッドは、UIPickerViewのサイズを変更するのではなく、トリミングします。それはあなたが探しているものかもしれないし、そうでないかもしれませんが、AFAIK、UIPickerViewを本当にサイズ変更する方法はありません、そしてこれはそれが得るのと同じくらい近いです。それほど悪くはないようです。

更新3(長い間延期): SDK 3.0以降、UIPickerViewはinitWithFrameまたはsetFrameを使用して完全にサイズ変更可能です。

于 2009-02-11T02:20:46.983 に答える
4

TextEdit で .xib ファイルを開き、UIPickerView のサイズを変更することで、サイズを編集できます。

于 2009-09-08T18:40:39.103 に答える
1

ピッカービューのサイズを変更するという同じ問題に取り組みました。いくつかの調査と頭痛の後で、簡単にできることを次に示します。

  1. インターフェイスビルダーを忘れてください!インターフェイス ビルダーがなくても、はるかに優れた UI を実現できると思います。
  2. コントローラーで、ロード ビュー メソッドを上書きします。

    -(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];
    
    }
    

幸運を

于 2010-06-30T22:53:46.733 に答える
0

UIPickerには1つのサイズがあり、変更することはできません。別の話を聞いてみたいと思います。

于 2009-02-11T02:22:11.317 に答える
0

問題ありません(登録したばかりです)。ちなみに、回答を投稿したときに、メソッド(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent .... が行と forComponent の間のスペースを失ったことに気付きました。したがって、デリゲートが正しいことを確認してください。そうしないと、機能しません。

于 2009-12-23T06:56:31.803 に答える
0

答えは次のとおりです。

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

以来:

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

もちろん、それを機能させます(つまり、スケーリングされたラベルで横向きに)

于 2010-01-02T19:11:01.647 に答える