2009-05-25 14 views
23

iPhoneアプリでUIPickerViewの高さを小さくしたいので、1行と1列だけを表示します。ピッカービューの高さは、行の高さと等しくなければなりません。iPhoneでUIPickerViewをどのように縮小しますか?

UIPickerViewを構築するためにInterface Builderを使用していますが、このコントロールのサイズを変更する簡単な方法が見つかりません。

UIPickerViewをどのように縮小しますか?

+0

UIScrollViewのを試してみて、didScroll中:デリゲートのメソッドは、スナップを行うスクロール速度がしきい値を下回った場合。 – Dimitris

答えて

52

実際には、アピーン変換を囲むビューに適用することによって、UIPickerView全体をわずかに縮小することができます。たとえば、

CGSize pickerSize = [pickerView sizeThatFits:CGSizeZero]; 

pickerTransformView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, pickerSize.width, pickerSize.height)]; 
pickerTransformView.transform = CGAffineTransformMakeScale(0.75f, 0.75f); 

[pickerTransformView addSubview:pickerView]; 
[self.view addSubview:pickerTransformView]; 
[pickerTransformView release]; 

は、ピッカーを包含ビュー内に配置し、そのビューにスケーリング変換を適用することによってピッカーを元のサイズの75%にスケーリングします。変換をUIPickerViewに直接適用すると、望ましくない描画アーチファクトが発生します。

しかし、あなたが探しているリサイズの種類は、カスタムコントロールを作成することによって最も効果的です。

+5

+1スーパービューに変換を適用することは決して考えなかった!私は常に不満足な結果でピッカービューにそれを適用しようとしました。もし私ができるなら、私はこれを10回upvoteしたいと思います。 –

+0

PickerViewを回転させた後にTouchイベントを送信する機能が失われています。思考? – Mark

+1

@mark - ピッカーとその周囲のビューが、そのビューを含む範囲内にあることを確認してください。彼らがスーパービューの外にいる場合、タッチイベントはそれらに到達しません。 –

1

私が知る限り、あなたがそれを縮めれば、それはうんざりされます。

a)UITableView + UIPickerView
これを行うには、「UITableView + UIPickerViewの1行」を使用することをお勧めします。 WindowsのdropDownListのようなtableViewの行を使用できます。この行をタップすると、pickerView(最初は非表示)が表示されます。

b) テーブルビューに長いデータリストがあり、そのうちの1つのみがデータを選択する必要がある場合、次の方法を使用してビューをスクロールする必要があります(pickerViewの元の位置を必ず計算してください)一緒に上下/移動する:


-(void)setViewMove:(BOOL)moveUP offset:(CGFloat)offset 
{ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    CGRect rect = self.view.frame; 

    if(moveUP) 
    { 
     rect.origin.y-=offset; 
     rect.size.height+=offset; 
    } 
    else //move down 
    { 
     rect.origin.y+=offset; 
     rect.size.height-=offset; 
    } 
    self.view.frame = rect; 
    [UIView commitAnimations]; 
} 

c)は ます。また、ピッカーのための別のビューを追加し、あなたが何かを選択しているこのビューに戻ることができます。

私の結論は次のとおりです。
tableViewに数行しかない場合は、aを使用します。
tableViewに多くの行があり、そのうちの1つだけにピッカーが必要な場合は、bを使用します。
tableViewにたくさんの行があり、それらの多くにピッカーが必要な場合は、cを使います。

+0

があり、我々は、Webページで –

+0

、ドロップダウンリストは、もともとWindowsプラットフォーム上の他のツールで作成されたWebページに表示のように、我々は、セレクタドロップダウンを作成することができる方法です。 SafariはdropDownListを見るために独自のコントロールを追加しますが、Appleはxcodeにそれを追加しません。 –

3

可能ですが簡単です!

<object class="IBUIPickerView" id="783900772"> 
<reference key="NSNextResponder" ref="191373211"/> 
<int key="NSvFlags">292</int> 
<string key="NSFrame">{{85, 68}, {150, 116}}</string> 

すべてです:

ちょうどピッカービューを見つけ、対策を調整し、その後、プレーンテキストとしてnibファイルを開きます!

+0

ここに書き込む太字のテキストを追加すると、何も起こりません。 (もともと320、216)、{320、116}に> NSFrameSize - はだから、次の項目を変更しました。そしてこれはうまくいく。 –

+0

Iこれはピッカーのインジケータを含む上位3行が表示されるように、{320、130}に「NSFrameSize」を設定するお勧めします。しかし、サイドエフェクトは、これがピッカーの下部フレームを表示せず、ユーザーがトップ3ライン以外を見ることができないということです。 –

+1

これは私のために何も変わっていません。 – Bryan

1

Interface BuilderでシンプルなUIViewを作成します。希望の位置とサイズを設定し、制約を追加します。 [クリップサブビュー]チェックボックスをオンにします。次に、&ドロップピッカービューをこのビューの中にサブビューとしてドラッグします。ピッカーのコンストレインを追加して、コンテナ内で水平方向と垂直方向に整列させます。仕事をしなければならない。

+0

:-(...同じまま。 – Nilambar

+0

残念ながら私StackOverflowのアカウントの「評判」を行いますあなたが好きならば、私はあなたに詳細を郵送することができます。私は、画像をアップロードすることはできませ。 – user2248258

1

ストーリーボードやオートレイアウトを使用している場合は、実際にuser2248258の回答が有効です。 Nilambarが提案したスクリーンショットを追加したいと思います。

  1. 場所はサイズの別のコンテナビューでpickerviewあなたは、コンテナビュー

  2. そのコンテナビューに水平方向と垂直方向の中央ピッカーを揃えるために、それPlace a pickerview into another container view

  3. チェックclipSubviewsたいですまた、後ろに先導する場所のためのゼロ制約を与える。

この方法では、ピッカービューが正しいサイズに切り取られます(サイズ変更されません)。

結果: enter image description here

+0

これは素晴らしい提案です、私が見えたものによく合いますか。 –

関連する問題