画面の幅全体(5つまたは6つのコンポーネント)を(ほぼ)占める、横向きモードのUIPickerを使用してアプリを開発しようとしています。UIPickerのサイズの設定方法を教えてください。ご助力ありがとうございます。
7 に答える
実際、ほぼすべてのアプリでピッカーのサイズを変更しています。画面全体を占めるのは好きではありません。これが私が使用している方法です:(ピッカーを水平になるように回転させていることに注意してください)
ビューで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;
}
これにより、見栄えの良い、はるかに小さい水平ピッカーが得られます。これが誰かに役立つことを願っています。
できません。UIPickerViewのサイズは一定です。
更新: UIPickerViewのサイズを変更できることがわかりました。秘訣は、それを別の(小さい)UIView内に配置し、そのビューのサイズを変更することです。私はまだこれを試していません。
更新2:このメソッドは、UIPickerViewのサイズを変更するのではなく、トリミングします。それはあなたが探しているものかもしれないし、そうでないかもしれませんが、AFAIK、UIPickerViewを本当にサイズ変更する方法はありません、そしてこれはそれが得るのと同じくらい近いです。それほど悪くはないようです。
更新3(長い間延期): SDK 3.0以降、UIPickerViewはinitWithFrameまたはsetFrameを使用して完全にサイズ変更可能です。
TextEdit で .xib ファイルを開き、UIPickerView のサイズを変更することで、サイズを編集できます。
ピッカービューのサイズを変更するという同じ問題に取り組みました。いくつかの調査と頭痛の後で、簡単にできることを次に示します。
- インターフェイスビルダーを忘れてください!インターフェイス ビルダーがなくても、はるかに優れた UI を実現できると思います。
コントローラーで、ロード ビュー メソッドを上書きします。
-(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]; }
幸運を
UIPickerには1つのサイズがあり、変更することはできません。別の話を聞いてみたいと思います。
問題ありません(登録したばかりです)。ちなみに、回答を投稿したときに、メソッド(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent ....
が行と forComponent の間のスペースを失ったことに気付きました。したがって、デリゲートが正しいことを確認してください。そうしないと、機能しません。
答えは次のとおりです。
-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
以来:
- (NSString*)pickerView:(UIPickerView*)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component
もちろん、それを機能させます(つまり、スケーリングされたラベルで横向きに)