UIPickerViewの高さを変更する方法


116

UIPickerViewの高さを変更することは可能ですか?一部のアプリケーションはPickerViewが短いようですが、小さいフレームを設定しても機能しないようで、フレームはInterface Builderでロックされています。


1
追加の答えは、同様の質問で見つけることができます:iPhoneでピッカービューを縮小する方法?
ブラッド・ラーソン

回答:


54

Appleがのデフォルトの高さでマッキングを特に勧めていないことは明らかであるように見えUIPickerViewますが、作成時に完全な制御を取り、希望のフレームサイズを渡すことで、ビューの高さを変更できることがわかりました。

smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];

さまざまな高さと幅で、視覚的な不具合があることがわかります。明らかに、これらのグリッチは何らかの方法で回避する必要があるか、それらを示さない別のサイズを選択する必要があります。


2
これはあなたのために働くのですか?私がインスタンス化するすべてのUIPickerViewsは、高さ215にロックされているようです...
Andy Bourassa

わたしにはできる。先ほど説明したように、initWithFrameメソッドで短縮された高さを指定していますか?彼らは一定の高さを保つために戦う傾向がありますが、短いフレームで初期化すると、うまくいきました。それでも動作しない場合は、サンプルを抜粋できるかどうかを確認します。
danielpunkass 2009年

サイズを変更できるサードパーティのコントロールはありますか?
cfischer 2011年

1
これはうまくいきました。4.3。最初の出現の前に、frameとsetframeで初期化します。
griotspeak

2
私はしばらくこれにこだわっていました。最初に表示される前にフレームまたはセットフレームで初期化する必要があることに注意してください。そうしないと、視覚的な不具合が発生します。
w.donahue

46

上記のアプローチはどれもiOS 4.0では機能しません

pickerViewの高さはサイズ変更できなくなりました。4.0でピッカーのフレームを変更しようとすると、コンソールにダンプされるメッセージがあります。

-[UIPickerView setFrame:]: invalid height value 66.0 pinned to 162.0 

OS 3.xxとOS 4.0の両方で機能する小さなピッカーの効果を得るために、私は結局かなり急進的なことをしました。私はピッカーをSDKが決定するサイズに設定し、代わりにピッカーが見えるようになる背景画像にカットスルー透明ウィンドウを作成しました。次に、ピッカーをバックグラウンドUIImageViewの後ろ(Zオーダー)に配置するだけで、ピッカーの一部のみが表示され、バックグラウンドの透明なウィンドウによって指示されます。


44

の有効な高さは3つだけですUIPickerView (162.0, 180.0 and 216.0)

CGAffineTransformMakeTranslationおよびCGAffineTransformMakeScale関数を使用して、ピッカーを適切に適切に合わせることができます。

例:

CGAffineTransform t0 = CGAffineTransformMakeTranslation (0, pickerview.bounds.size.height/2);
CGAffineTransform s0 = CGAffineTransformMakeScale       (1.0, 0.5);
CGAffineTransform t1 = CGAffineTransformMakeTranslation (0, -pickerview.bounds.size.height/2);
pickerview.transform = CGAffineTransformConcat          (t0, CGAffineTransformConcat(s0, t1));

上記のコードは、ピッカービューの高さを半分に変更し、正確な(Left-x1、Top-y1)位置に再配置します。


1
すばらしい答えです。ピッカーの高さを変更するために、平行移動を使用する必要がないことに注意してください:pickerview.transform = CGAffineTransformMakeScale(1.0、0.5);
ボルジ14年

2
ありがとう。それは本当のようですが、有効な高さに関するアップルのドキュメントはありますか?
Eric Chen

40

試してください:

pickerview.transform = CGAffineTransformMakeScale(.5, 0.5);

2
私はここでのパーティーに遅れていることを知っています。おそらくこれを行うためのより良い方法があるでしょうが、これは私にとってはうまくいきました。
ハニー

よく働く!Swift(iOS 10)の場合:statePicker.transform = CGAffineTransform(scaleX:0.8、y:0.8)
Meshach

25

iOS 4.2および4.3では、次のように動作します。

UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.frame = CGRectMake(0, 0, 320, 180);
[self addSubview:datePicker];

以下は機能しません。

UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 180)];
[self addSubview:datePicker];

アプリストアに3行の日付ピッカーを備えたアプリがあります。日付ピッカーの境界線の下にテキストが表示されるため、高さの変更が妨げられたのではないかと思いましたが、これは通常の高さ216の日付ピッカーでも発生します。

バグはどれですか?あなたの推測は私のものと同じです。

また、162.0、180.0、および216.0にはUIDatePicker(およびUIPickerView)3つの有効な高さがあります。UIPickerView高さを他の値に設定すると、iOSデバイスでデバッグするときにコンソールに次のように表示されます。

2011-09-14 10:06:56.180 DebugHarness[1717:707] -[UIPickerView setFrame:]: invalid height value 300.0 pinned to 216.0

14

iOS 9以降、UIPickerViewの幅と高さを自由に変更できます。上記の変換ハックを使用する必要はありません。


サイズを大きくしたUIPickerViewにinputAccessoryViewを追加する方法を決定する必要があります。
DogCoffee 2018

心の共有方法は?
inmanl

10

私はあなた UIPickerViewのサイズを編集できることを発見しました-ただインターフェースビルダーでではありません。テキストエディターで.xibファイルを開き、ピッカービューのサイズを任意に設定します。インターフェイスビルダーはサイズをリセットせず、機能しているようです。アップルが理由のためにサイズをロックしたと私は確信しているので、何が機能するかを確認するために異なるサイズで実験する必要があります。


7

利点:

  1. setFrameが本来あるUIPickerViewべき動作をするようにします
  2. あなたの中に変換コードはありません UIViewController
  3. 内で機能viewWillLayoutSubviewsし、UIPickerView
  4. iPadなしで動作します UIPopover
  5. スーパークラスは常に有効な高さを受け取ります
  6. iOS 5で動作します

短所:

  1. サブクラス化する必要があります UIPickerView
  2. を使用pickerView viewForRowして、サブビューの変換を元に戻す必要があります
  3. UIAnimationsが機能しない場合がある

解決:

UIPickerViewをサブクラス化し、次のコードを使用して2つのメソッドを上書きします。サブクラス化、固定高さ、変換アプローチを組み合わせています。

#define FIXED_PICKER_HEIGHT 216.0f
- (void) setFrame:(CGRect)frame
{
    CGFloat targetHeight = frame.size.height;
    CGFloat scaleFactor = targetHeight / FIXED_PICKER_HEIGHT;
    frame.size.height = FIXED_PICKER_HEIGHT;//fake normal conditions for super
    self.transform = CGAffineTransformIdentity;//fake normal conditions for super
    [super setFrame:frame];
    frame.size.height = targetHeight;
    CGFloat dX=self.bounds.size.width/2, dY=self.bounds.size.height/2;
    self.transform = CGAffineTransformTranslate(CGAffineTransformScale(CGAffineTransformMakeTranslation(-dX, -dY), 1, scaleFactor), dX, dY);
}

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    //Your code goes here

    CGFloat inverseScaleFactor = FIXED_PICKER_HEIGHT/self.frame.size.height;
    CGAffineTransform scale = CGAffineTransformMakeScale(1, inverseScaleFactor);
    view.transform = scale;
    return view;
}

7

ピッカービューの表示高さを変更する簡単な方法は、ピッカーをUIViewに埋め込み、親ビューの高さをピッカーの表示したい高さに調整してから、親UIViewのインターフェイスビルダーで「サブビューのクリップ」を有効にすることです。またはview.clipsToBounds = trueコードで設定します。

IBでのサブビューのクリップ


これが実際に機能することを確認できますか?xcodeではそれはそのように見えますが、デバイスで実行すると、そのuiviewのピッカービューが表示されます
nhenrique

1
@nhenriqueで動作しますが、忘れてはいけませんClip Subviews。またの大きさは、UIPickerView背が高くなければなりません-あなたは、あなたの中心を目指す必要がありUIPickerView、親の内側見えるようにUIView
new2ios

これはiOS 7.1での私の解決策でした。
ダグラス

これは機能していません、@ new2ios、これがiOS8で機能していることを確認できますか?同じことをプログラムで実行しようとしています。
Hemang

すみません、@ hagileですが、その考えは放棄します-確認できません。Storyboardを使用します(UIPickerViewコードから作成しませんでした)。
new2ios

5

上記のアドバイスのいずれにも従うことができませんでした。

私は複数のチュートリアルを見て、これを見つけましが最も有益である:

アプリで機能する「viewDidLoad」メソッド内に新しい高さを設定する次のコードを追加しました。

UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)]; 
[self.view addSubview:picker];
picker.delegate = self;
picker.dataSource = self;

これがお役に立てば幸いです!


4

これはiOS 9で大幅に変更されました(iOS 8では、これは私たちがここで見ているものとかなり似ています)。iOS 9のみを対象とする余裕がある場合は、UIPickerView、フレームを設定して、します。良い!

こちらはiOS 9リリースノートからです

UIPickerViewとUIDatePickerはサイズ変更と適応が可能になりました。以前は、これらのビューのサイズを変更しようとした場合でも、デフォルトのサイズが強制されていました。これらのビューも、iPhoneのデバイス幅ではなく、すべてのデバイスで320ポイントの幅にデフォルト設定されるようになりました。

iOS 9向けにコンパイルすると、古いサイズの強制に依存するインターフェースは正しく表示されない可能性があります。発生した問題は、暗黙の動作に依存する代わりに、ピッカービューを目的のサイズに完全に制約またはサイズ変更することで解決できます。


2

私はiOS 7、Xcode 5で作業しています。日付ピッカーをビューで囲むことにより、間接的に日付ピッカーの高さを調整できました。コンテナビューの高さを調整できます。


これは、iOS 7で実行している限り機能しました。iOS6で同じビルドを実行すると、ピッカー全体が、他のビューによって上書きされる部分を想定して表示されます。> = 7のみをターゲットとする限り、これは実行可能かもしれません。ピッカーが最初にレンダリングされるようにビューを並べ替えると、効果的に範囲外の部分が非表示になりますが、これは他のビューでマスクするだけです。
Doug Gerecht 2013年

これがどのように行われたかについてもう少し説明できますか?これはビューを縮小するためだけですか、それともピッカーを大きくすることもできますか?現在iOS 7 iPadアプリを開発していて、ピッカーを高くする必要がありますが、何を試しても、大きくすることはできません!
Lizza

2

IBまたはコードでビューを作成します。このビューのサブビューとしてピッカーを追加します。ビューのサイズを変更します。これはIBで行うのが最も簡単です。ビューからそのスーパービューまで、およびピッカーからこの新しいビューまでの制約を作成します。

その周りのピッカーカーブがビューの上部と下部に溢れているため。ピッカーからビューに上下の制約を追加すると、IBでスーパービューコンテナーの上下16ポイントのような標準スペースが表示されます。この動作を望まない場合は、ビューをクリップするように設定してください(醜い警告)。

iPhone 5での高さが96ポイントの様子は次のとおりです。スピルオーバー付きのピッカーの高さは約130ポイントです。かなり細い!

プロジェクトでこれを使用して、ピッカーが不必要な高さまで広がるのを防ぎます。このテクニックはそれを削減し、より強い流出を強制します。実際には、少しコンパクトに見えるように見えます。

ここに画像の説明を入力してください

これは波及を示すビューの画像です。

ここに画像の説明を入力してください

これが私が追加したIB制約です。

ここに画像の説明を入力してください


1

サイズ変更ではない場合でも、UIPickerが画面の下部にある場合は別のトリックが役立つ場合があります。

少し下に動かしてみることもできますが、中央の列は表示されたままです。これは、一番下の行が画面外になるため、ピッカーの上のスペースを明らかにするのに役立ちます。

これはUIPickerビューの高さを変更する方法ではありませんが、他のすべての試行が失敗した場合に何ができるかについての考えを繰り返します。


1

わかりました、iOS 4の愚かなピッカービューで長い間苦労した後、私は自分のコントロールを単純なテーブルに変更することにしました。ここにコードがあります:

ComboBoxView.m = which is actually looks more like pickerview.

//
//  ComboBoxView.m
//  iTrophy
//
//  Created by Gal Blank on 8/18/10.
//

#import "ComboBoxView.h"
#import "AwardsStruct.h"


@implementation ComboBoxView

@synthesize displayedObjects;

#pragma mark -
#pragma mark Initialization

/*
- (id)initWithStyle:(UITableViewStyle)style {
    // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
    if ((self = [super initWithStyle:style])) {
    }
    return self;
}
*/


#pragma mark -
#pragma mark View lifecycle

/*
- (void)viewDidLoad {
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
*/

/*
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
}
*/
/*
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
}
*/
/*
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
}
*/
/*
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
}
*/
/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/


#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    return [[self displayedObjects] count];
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row];

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
        //cell.contentView.frame = CGRectMake(0, 0, 230.0,16);
        UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 5, 230.0,19)] autorelease];
        VivatAwardsStruct *vType = [displayedObjects objectAtIndex:indexPath.row];
        NSString *section = [vType awardType]; 
        label.tag = 1;
        label.font = [UIFont systemFontOfSize:17.0];
        label.text = section;
        label.textAlignment = UITextAlignmentCenter;
        label.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
        label.adjustsFontSizeToFitWidth=YES;
        label.textColor = [UIColor blackColor];
        //label.autoresizingMask = UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:label]; 
        //UIImage *image = nil;
        label.backgroundColor = [UIColor whiteColor];
        //image = [awards awardImage];
        //image = [image imageScaledToSize:CGSizeMake(32.0, 32.0)];

        //[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        //UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        //cell.accessoryView = imageView;
        //[imageView release];
    }

    return cell;
}


/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/


/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/


/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/


/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/


#pragma mark -
#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
     */
}


#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Relinquish ownership any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
}


- (void)dealloc {
    [super dealloc];
}


@end

そのための.hファイルは次のとおりです。

//
//  ComboBoxView.h
//  iTrophy
//
//  Created by Gal Blank on 8/18/10.
//

#import <UIKit/UIKit.h>


@interface ComboBoxView : UITableViewController {
    NSMutableArray *displayedObjects;
}

@property (nonatomic, retain) NSMutableArray *displayedObjects;


@end

now, in the ViewController where I had Apple UIPickerView I replaced with my own ComboBox view and made it size what ever I wish.

ComboBoxView *mypickerholder = [[ComboBoxView alloc] init]; 
[mypickerholder.view setFrame:CGRectMake(50, 220, 230, 80)];
[mypickerholder setDisplayedObjects:awardTypesArray];

それだけです。今残っているのは、現在の行選択を保持するメンバー変数をコンボボックスビューに作成することだけです。これで準備は完了です。

みんなをお楽しみください。


ここにVivatAwardsStructとは何ですか、ここでエラーが発生します、VivatAwardsStructは宣言されていません
Mahesh Babu

1

通常、プログラムでxibまたはフレームの設定でそれを行うことはできませんが、親のxibをソースとして開き、そこから高さを変更すると、機能します。そのタグで、高さを変更してファイルを保存します。

<pickerView contentMode="scaleToFill" id="pai-pm-hjZ">
                                    <rect key="frame" x="0.0" y="41" width="320" height="100"/>
                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
                                    <connections>
                                        <outlet property="dataSource" destination="-1" id="Mo2-zp-Sl4"/>
                                        <outlet property="delegate" destination="-1" id="nfW-lU-tsU"/>
                                    </connections>
                                </pickerView>

0

私の知る限り、UIPickerViewを縮小することは不可能です。また、実際に使用されている短いものはどこにもありません。私が思うに、彼らがなんとかそれを縮小できたなら、それはカスタム実装だったと思います。


uipickerviewを水平方向にサイズ変更できますが、設定が短すぎると視覚的な不具合が発生します。
futureelite7 '17年

0

IBでピッカーを作成する場合は、後のサイズ変更で小さいサイズにすることができます。それが凶暴に見える点があるので、それでもそれがまだ正しく描画されていることを確認してください。


0

Swift:クリップ付きのサブビューを境界に追加する必要があります

    var DateView = UIView(frame: CGRectMake(0, 0, view.frame.width, 100))
    DateView.layer.borderWidth=1
    DateView.clipsToBounds = true

    var myDatepicker = UIDatePicker(frame:CGRectMake(0,-20,view.frame.width,162));
    DateView.addSubview(myDatepicker);
    self.view.addSubview(DateView)

これにより、ビューコントローラの上部に高さ100の日付のピッカーがクリップされます。


0

私のトリック:datePickerのマスクレイヤーを使用して、datePickerの一部を表示します。ご覧のように、datepickeのフレームを変更します。

- (void)timeSelect:(UIButton *)timeButton {
UIDatePicker *timePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 550)];
timePicker.backgroundColor = [UIColor whiteColor];
timePicker.layer.mask = [self maskLayerWithDatePicker:timePicker];
timePicker.layer.masksToBounds = YES;
timePicker.datePickerMode = UIDatePickerModeTime;
[self.view addSubview:timePicker];
}

- (CALayer *)maskLayerWithDatePicker:(UIDatePicker *)datePicker {
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, datePicker.width*0.8, datePicker.height*0.8) cornerRadius:10];
shapeLayer.path = path.CGPath;
return shapeLayer;
}

0

マスクレイヤーを使用して表示サイズを変更します

// swift 3.x
let layer = CALayer()
layer.frame = CGRect(x: 0,y:0, width: displayWidth, height: displayHeight)
layer.backgroundColor = UIColor.red.cgColor
pickerView.layer.mask = layer

0

スタックビューに埋め込みます。スタックビューは、最近AppleがiOS SDKに追加したコンポーネントであり、ブートストラップなどのJavaスクリプトWebベースのフロントエンドライブラリのグリッドベースの実装を反映しています。


0

上記のとおり、UIPickerViewサイズ変更が可能になりました。ただし、tableViewセルでpickerViewの高さを変更する場合、高さアンカーを定数に設定することはできませんでした。ただし、使用lessThanOrEqualToConstantは機能するようです。

 class PickerViewCell: UITableViewCell {

    let pickerView = UIPickerView()

    func setup() {

        // call this from however you initialize your cell

        self.contentView.addSubview(self.pickerView)
        self.pickerView.translatesAutoresizingMaskIntoConstraints = false

        let constraints: [NSLayoutConstraint] = [
            // pin the pickerView to the contentView's layoutMarginsGuide

            self.pickerView.leadingAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.leadingAnchor),
            self.pickerView.topAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.topAnchor),
            self.pickerView.trailingAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.trailingAnchor),
            self.pickerView.bottomAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.bottomAnchor),

            // set the height using lessThanOrEqualToConstant
            self.pickerView.heightAnchor.constraint(lessThanOrEqualToConstant: 100)
        ]

        NSLayoutConstraint.activate(constraints)
     }

 }

-1

頭を悩ませる長い一日を過ごした後、自分にぴったりのものが見つかりました。以下のコードは、ユーザーが電話の向きを変更するたびにUIDatePickerを再作成します。これにより、方向を変更した後にUIDatePickerにあるグリッチがすべて削除されます。

UIDatePickerを再作成しているため、選択した日付値を保持するインスタンス変数が必要です。以下のコードはiOS 4.0でテストされています。

    @interface AdvanceDateViewController : UIViewController<UIPickerViewDelegate> {
        UIDatePicker *datePicker;
        NSDate *date;
    }


    @property (nonatomic, retain) UIDatePicker *datePicker;
    @property (nonatomic, retain) NSDate *date;

    -(void)resizeViewWithOrientation:(UIInterfaceOrientation) orientation;

    @end

    @implementation AdvanceDateViewController
    @synthesize datePicker, date;

    - (void)viewDidLoad {
      [super viewDidLoad];
          [self resizeViewWithOrientation:self.interfaceOrientation];
    }


    -(void)viewWillAppear:(BOOL)animated{
         [super viewWillAppear:animated];
         [self resizeViewWithOrientation:self.interfaceOrientation];
     }

     - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
         return YES;
     }

     -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
      [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
      [self resizeViewWithOrientation:toInterfaceOrientation];
      }

     -(void)resizeViewWithOrientation:(UIInterfaceOrientation) orientation{
          [self.datePicker removeFromSuperview];
          [self.datePicker removeTarget:self action:@selector(refreshPickupDate) forControlEvents:UIControlEventValueChanged];
          self.datePicker = nil;

          //(Re)initialize the datepicker, thanks to Apple's buggy UIDatePicker implementation
          UIDatePicker *dummyDatePicker = [[UIDatePicker alloc] init];
          self.datePicker = dummyDatePicker;
          [dummyDatePicker release];

          [self.datePicker setDate:self.date animated:YES];
          [self.datePicker addTarget:self action:@selector(refreshPickupDate) forControlEvents:UIControlEventValueChanged];

          if(UIInterfaceOrientationIsLandscape(orientation)){
                 self.datePicker.frame = CGRectMake(0, 118, 480, 162);    
           } else {
                 self.datePicker.frame = CGRectMake(0, 200, 320, 216);
           }

           [self.view addSubview:self.datePicker];
           [self.view setNeedsDisplay];
      }

      @end

-1
stockPicker = [[UIPickerView alloc] init];
stockPicker.frame = CGRectMake(70.0,155, 180,100);

UiPickerViewのサイズを設定したい場合。上記のコードはきっとあなたのために働くでしょう。


-1

iOS 5.0では、次のものが機能しました。

UIDatePicker *picker = [[UIDatePicker alloc] init];
picker.frame = CGRectMake(0.0, 0.0, 320.0, 160.0);

これにより、Appleが横向きモードで新しいイベントを作成するときにカレンダーアプリで使用するような日付ピッカーが作成されました。(高さは5ではなく3行です。)initWithFrame:メソッド内でフレームを設定すると機能しませんでしたが、これまでのところ、別のメソッドを使用して設定すると機能します。


-1

iOS 5の場合:

UIPickerView Protocol Referenceをざっと見てみると

あなたは見つけるでしょう

 pickerView:rowHeightForComponent:
 pickerView:widthForComponent:

あなたが探している最初のものだと思います


pickerView:rowHeightForComponent:ピッカービューの高さではなく、各行の高さを決定するデリゲートメソッドです。
チューリングテスト済み
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.