簡體   English   中英

如何使用Autolayout和Size類獲取Custom TableviewCell的寬度

[英]How to get the width of the Custom TableviewCell using Autolayout and Size Classes

我在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}}。 此處的寬度為600,與“任意尺寸”的寬度相同。

但是對於iPhone5,我希望此處的寬度為320。如何獲得UITableViewCell的自動調整寬度。

我想我剛剛遇到了類似的問題,並且我想已經解決了。

我的問題源於將最初在iOS 6的XCode 4.7中設置的Storyboard轉換為iOS 9的xCode 7(我收集的內容與xCode 6和iOS 8相同)。 使用“模擬度量”中的舊iPhone特定尺寸,一切工作都很好,但是當將新的“自動布局”的所有內容轉換為600x600大小時,我遇到了類似的問題。

我已正確調整了所有子視圖的大小和間距,但是我添加到自定義UITableViewCells中的框架繪制不正確:左邊距正確,高度也正確,但是該框架是從屏幕右側繪制的。 麻煩的是,單元中的所有子視圖(UILabel和UISwitch)都在正確的位置繪制。

這使我意識到,就像OP一樣,我在cellForRowAtIndexPath中添加了繪制框架的子層。 顯然,在新的Autolayout中具有600x600尺寸的模板的情況下,在dequeReusableCellWithIdentifier之后尚未設置UITableViewCell的寬度,但稍后進行設置。 這使我意識到,我們可能不應該在cellForRowAtIndexPath中做任何涉及單元格尺寸的事情,而只是設置屬性而已,除非我完全不了解這一點。

解決方案:實現UITableViewCell的子類,並在drawRect中完成所有繪圖。 到那時,所有約束都應正確設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM