3 回答

TA貢獻2039條經驗 獲得超8個贊
我也遇到了這個問題。似乎在layoutSubviews調用contentView的框架之前,它不會得到更新, 但是單元格的框架會更早更新,而在{0, 0, 320, 44}評估約束時將contentView的框架設置為。
詳細查看contentView之后,似乎不再設置autoresizingMask。
在約束視圖之前設置autoresizingMask可以解決此問題:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
if (self)
{
self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
[self loadViews];
[self constrainViews];
}
return self;
}

TA貢獻1802條經驗 獲得超5個贊
顯然,使用iOS 8 SDK的iOS 7上的UITableViewCell和UICollectionViewCell出了問題。
像這樣重用單元格時,可以更新單元格的contentView:
對于靜態UITableViewController:
#ifdef __IPHONE_OS_VERSION_MIN_REQUIRED
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1)
{
cell.contentView.frame = cell.bounds;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin |UIViewAutoresizingFlexibleTopMargin |UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin;
}
//your code goes here
return cell;
}
#endif
#endif
由于靜態表視圖控制器易碎,如果實現某些數據源或deletegate方法,則很容易損壞-有檢查將確保僅在iOS 7上編譯和運行此代碼
它與標準動態UITableViewController類似:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellID = @"CellID";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_7_1)
{
cell.contentView.frame = cell.bounds;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin |UIViewAutoresizingFlexibleTopMargin |UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin;
}
//your code goes here
return cell;
}
對于這種情況,我們不需要額外的編譯檢查,因為需要實現此方法。
這兩種情況以及UICollectionViewCell的想法都是相同的,就像在此線程中所評論的:僅在iOS 7上運行時,才會在Storyboard原型單元(Xcode 6,iOS 8 SDK)中自動調整UICollectionViewCell contentView的框架大小
- 3 回答
- 0 關注
- 672 瀏覽
添加回答
舉報