3 回答

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
我也遇到了這個(gè)問(wèn)題。似乎在layoutSubviews調(diào)用contentView的框架之前,它不會(huì)得到更新, 但是單元格的框架會(huì)更早更新,而在{0, 0, 320, 44}評(píng)估約束時(shí)將contentView的框架設(shè)置為。
詳細(xì)查看contentView之后,似乎不再設(shè)置autoresizingMask。
在約束視圖之前設(shè)置autoresizingMask可以解決此問(wèn)題:
- (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貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
顯然,使用iOS 8 SDK的iOS 7上的UITableViewCell和UICollectionViewCell出了問(wèn)題。
像這樣重用單元格時(shí),可以更新單元格的contentView:
對(duì)于靜態(tài)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
由于靜態(tài)表視圖控制器易碎,如果實(shí)現(xiàn)某些數(shù)據(jù)源或deletegate方法,則很容易損壞-有檢查將確保僅在iOS 7上編譯和運(yùn)行此代碼
它與標(biāo)準(zhǔn)動(dòng)態(tài)UITableViewController類(lèi)似:
-(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;
}
對(duì)于這種情況,我們不需要額外的編譯檢查,因?yàn)樾枰獙?shí)現(xiàn)此方法。
這兩種情況以及UICollectionViewCell的想法都是相同的,就像在此線(xiàn)程中所評(píng)論的:僅在iOS 7上運(yùn)行時(shí),才會(huì)在Storyboard原型單元(Xcode 6,iOS 8 SDK)中自動(dòng)調(diào)整UICollectionViewCell contentView的框架大小
- 3 回答
- 0 關(guān)注
- 677 瀏覽
添加回答
舉報(bào)