web-dev-qa-db-ja.com

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

IPhoneアプリのUIPickerViewの高さを低くして、1行1列のみが表示されるようにします。ピッカービューの高さは、行の高さと同じである必要があります。

InterfaceBuilderを使用してUIPickerViewを作成していますが、このコントロールのサイズを変更する簡単な方法が見つかりません。

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

23
Rahul Vyas

実際には、アフィン変換を囲んでいるビューに適用することで、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に直接適用すると、望ましくない描画アーティファクトが発生します。

ただし、探している種類のサイズ変更は、カスタムコントロールを作成することで最も効果的です。

52
Brad Larson

それは可能で簡単です!

Nibファイルをプレーンテキストとして開き、ピッカービューを見つけて、メジャーを調整するだけです。

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

それで全部です!

3
Alejandra

InterfaceBuilderで簡単なUIViewを作成します。目的の位置とサイズを設定し、制約を追加します。 「サブビューのクリップ」チェックボックスをオンにします。次に、ピッカービューをこのビュー内にサブビューとしてドラッグアンドドロップします。ピッカーがコンテナ内で水平方向と垂直方向に整列するように制約を追加します。仕事をする必要があります。

1
user2248258

私の知る限り、縮小するとめちゃくちゃになります。

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

b)tableViewにデータの長いリストがあり、データを選択する必要があるアイテムが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に数行しかない場合は、を使用します。
tableViewに多数の行があり、そのうちの1つだけがピッカーを必要とする場合は、bを使用します。
tableViewに多数の行があり、それらの多くにピッカーが必要な場合は、cを使用します。

1
Chilly Zhong

User2248258の答えは、ストーリーボードや自動レイアウトを使用している場合に実際に機能します。 Nilambarが提案したように、そこにスクリーンショットを追加したいと思います。

  1. ピッカービューを必要なサイズの別のコンテナビューに配置します Place a pickerview into another container view

  2. コンテナビューのclipSubviewsを確認してください

  3. ピッカーをそのコンテナービューの水平方向と垂直方向の中央に配置し、末尾と先頭の場所の制約をゼロにします

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

結果: enter image description here

1
palme