18

Interface Builder を使用して、iPad アプリケーション用のカスタム UITableViewCell を設計しています。

ルート ビューとして UITableViewCell を持つ専用の XIB ファイルがあります。UITableViewCell の幅を 1024 に変更することができ (XCode の右側のプロパティ ペインにある [サイズ] インスペクターで)、キャンバス上のセルのサイズを一時的に変更します。

ただし、後で UITableViewCell 内の特定のアイテムを移動/サイズ変更しようとしたり、XIB を閉じて再度開いたりすると、XCode は UITableViewCell の幅を 320 (iPhone 固有の幅) にリセットすることを決定します。

キャンバス上のセルは、セル内のアイテムを覆い隠し、セルのサイズを再度変更しない限り、セルのデザインを不可能にします。このループを数回回ると、かなり面倒になります。

幅を永続的に設定する方法や、UITableViewCellがiPad固有であることを指定する方法を知っている人はいますか?


再現するには…

  • ファイル > 新規 > ファイル...
  • ユーザーインターフェース > 空
  • デバイス ファミリー == iPad

  • 新しいUITableViewCellをキャンバスにドラッグします(以前にiPadを選択したにもかかわらず、幅320で作成されました)

  • UITableViewCell の幅を 1024 にサイズ変更します (これまでのところすべて問題ありません)。
  • UILabel を UITableViewCell の左側にドラッグ アンド ドロップします (それでも問題ありません)。
  • 角をドラッグして UILabel のサイズを変更します (属性インスペクターは使用しないでください) - そして... UITableViewCell のサイズは 320 にリセットされます

編集:

何年も前に作成した Radar チケットに対して、Apple から次の応答を受け取りました...

オリバーさん、こんにちは。

これは Bug ID# 13222753 に関するフォローアップです。

エンジニアリング チームは、この問題をさらに調査するために次の情報を要求しました。

この問題は、最新の Xcode 5.1 Seed で解決されていると考えています。

これは、Mac、iPhone、および iPad 用の Xcode 開発者ツールセットのプレリリース バージョンです。Xcode IDE、iOS シミュレーター、および OS X と iOS アプリを構築するために必要なすべてのツールとフレームワークが含まれています。このリリースでテストし、その結果でバグ レポートを更新してください。

Xcode 5.1 シード - ビルド 5B71f 投稿日: 2013 年 12 月 13 日

また、Xcode 5.0.2 で問題を再現しようとしましたが、そのビルドでも修正されているようです。

4

4 に答える 4

6

あなたがこれを有効な答えと考えるかどうかはわかりませんが、IB でautolayoutを使用していたときにのみ問題が発生したようです。これをオフにすると、UITableViewCell のサイズを変更する Xcode の問題はなくなります。

autolayoutをオフにするには、UITableViewCell を選択し、「ファイル インスペクタ」の右側にautolayoutをオフにするチェックボックスがあります。

于 2013-03-12T03:53:41.177 に答える
5

回避策は、ペン先に Table View Cell を追加しないことです。代わりに、通常のビューを使用してサブビューを含めます。

nib をロードし、最上位の nib ビューをセル コンテンツ ビューのサブビューとして設定するカスタム UITableViewCell クラスを作成します。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self) {
        UINib *nib = [UINib nibWithNibName:@"YourNibName" bundle:nil];
        UIView* containerView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
        containerView.translatesAutoresizingMaskIntoConstraints = NO
        [self.contentView addSubview:containerView];

        NSDictionary *views = NSDictionaryOfVariableBindings(containerView);
        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[containerView]|" options:0 metrics:nil views:views]];
        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[containerView]|" options:0 metrics:nil views:views]];
    }

    return self;
}

クラスをテーブル ビューに登録します。

[tableView registerClass:YourCellClass forCellReuseIdentifier:@"YourCellID"]`
于 2013-04-19T04:50:57.677 に答える
1

テストを行ったところ、セルのサイズ変更に問題はありませんでした。Xib が「iPhone 用」または「iPad 用」オプションで作成された場合、違いはありませんでした。したがって、これは期待どおりに機能します。

コツは、サイズをドラッグするのではなく、インスペクターを使用して幅を変更することです。これにより、セルのサイズは 1024 のままになります。

于 2013-01-31T21:34:40.527 に答える
0

Edward Huynh の回答が正しいことを確認します。同時に、自動レイアウトをオフにして、高さを変更し、自動レイアウトを元に戻す余裕はありませんでした。これには、コンテンツ ビューのサブビューごとにすべての自動レイアウト設定をやり直す必要があります。

私はちょうど実験していて、TextEdit で xib ファイルを開き、tableViewCell と tableViewCellContentView の幅と高さを変更すると、実際にはすべての自動レイアウトが保持され、セルのサイズが更新されることがわかりました。制約の定数値のいくつかは現在廃止されており、そのような制約に対して「制約の更新」を使用することで簡単に修正できます。

ここに画像の説明を入力

于 2016-03-10T14:02:41.767 に答える