1

Any-Any Size を使用Storyboardし、次の制約を定義しますUITableViewCell

  1. SuperView への先行スペース -16.00px
  2. SuperView への末尾のスペース -16.00px
  3. 上部スペースから SuperView 0.00px まで
  4. 下部スペースから SuperView 0.00px まで

UITableViewCell iPhoneのすべてのサイズのフレームを印刷すると、フレームサイズが取得されます

BookTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BookTableViewCellID"];
if (cell==nil) {
   cell = [[BookTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"BookTableViewCellID"];
} 
NSLog(@"TextView Cell Frame %@ ",NSStringFromCGRect( cell.contentView.frame));

出力の textView セル フレーム {{0, 0}, {600, 44}}。ここで、幅は Any-Any Size の幅と同じ 600 です。

しかし、iPhone5の場合、ここの幅は320であると予想されます..の自動サイズ変更幅を取得するにはどうすればよいですかUITableViewCell.

4

1 に答える 1

1

同様の問題が発生したと思いますが、解決したと思います。

私の問題は、iOS 6 用の XCode 4.7 で最初に設定された Storyboard を iOS 9 用の xCode 7 に変換したことに起因します (これは、xCode 6 および iOS 8 と同じです)。Simulated Metrics の古い iPhone 固有のサイズではすべてうまく機能していましたが、すべてを新しい Autolayout の 600x600 サイズに変換すると、同様の問題が発生しました。

すべてのサブビューのサイズと間隔を適切に変更しましたが、カスタム UITableViewCells に追加していたフレームが正しく描画されませんでした。高さと同様に左マージンは正しいのですが、フレームは画面から右に描画されていました。問題は、セル内のすべてのサブビュー (UILabel と UISwitch) が正しい場所に描画されていたことです。

これにより、OP のように、フレームを cellForRowAtIndexPath に描画するサブレイヤーを追加していることに気付きました。どうやら、新しい Autolayout の 600x600 サイズのテンプレートでは、UITableViewCell の幅は dequeReusableCellWithIdentifier の後でまだ設定されていませんが、後でセットアップされます。これにより、おそらく cellForRowAtIndexPath でセルのサイズに関係することは何もすべきではなく、プロパティなどを設定するだけでよいことに気付きました。これを完全に理解していない場合を除きます。

解決策: UITableViewCell のサブクラスを実装し、すべての描画を drawRect で行います。それまでに、すべての制約が正しく設定されているはずです。

于 2015-11-08T03:31:33.357 に答える