iOS 8单元格调整大小

时间:2014-09-18 11:28:51

标签: uitableview resize ios8

我有一个UITableViewCell的子类,我重写setFrame:以向单元格添加插入内容。在iOS 7中,一切似乎都运行良好,另一方面,在iOS 8上,表视图正确加载单元格但是当我刷新tableview时,单元格会调整大小。 通过对setFrame中的代码进行注释,tableview的行为正确,但我也松开了插件。 有没有人经历过这个?

更新:AFAIK,在iOS 8中,单元格框架高度与行高相匹配。

3 个答案:

答案 0 :(得分:4)

我遇到了类似的问题。

通过以下方式解决:

- (void)setFrame:(CGRect)frame
{
  NSInteger inset = kDefaultViewPadding;
  frame.origin.x += inset;
  frame.size.width = kMainScreenWidth - 2*inset;

  [super setFrame:frame];
}

其中

#define kMainScreenWidth            ([[UIScreen mainScreen] bounds].size.width)

请勿使用以下代码:

    frame.origin.x += TABLE_PADDING;

    frame.size.width = self.superview.frame.size.width - (2.0f * TABLE_PADDING);

否则,每次刷新tableview时,单元格的宽度减小(2.0f * TABLE_PADDING)。

答案 1 :(得分:3)

我不知道为什么iOS 8中的行为发生了变化,但我找到了解决方法。

在我的情况下,我将setFrame消息更改为以下内容:

-(void) setFrame:(CGRect) frame {
    frame.origin.x += TABLE_PADDING;
    frame.size.width = self.superview.frame.size.width - (2.0f * TABLE_PADDING);
    [super setFrame: frame];
}

所以我使用superview边界进行计算。 然而,这在任何情况下都可能无效......

重新排序单元格时遇到了另一个问题。

如果您要重新排序,请尝试以下方法:

-(void) setFrame:(CGRect) frame {

    if(isDragging)
        frame.origin.x = self.supervire.frame.origin.x + TABLE_PADDING;
    else
        frame.origin.x += TABLE_PADDING;

    frame.size.width = self.superview.frame.size.width - (2.0f * TABLE_PADDING);
    [super setFrame: frame];
}

要在TableCell拖动时获取信息,我使用了此问题中提供的解决方案:How to get notified of UITableViewCell move start and end

修改 我遇到了越来越多的setFrame消息问题,所以我决定不使用标准的TableViewController。现在我使用带有搜索栏和搜索显示控制器的标准ViewController。并在控制器视图内查看表格。这样我就可以使用自动布局约束来调整表格宽度。这似乎是我案例的最佳解决方案,因为我找不到任何方法让它(使用setFrame消息)工作(无论如何)。

答案 2 :(得分:0)

我通过将代码从setFrame移到layoutSubviews部分解决了我的问题,而不是使用self.frame,我使用awakeFromNib中保存的属性来保存我的- (void)layoutSubviews { [super layoutSubviews]; CGRect bounds = self.cellBounds; CGRect boundsWithInsets = CGRectMake(bounds.origin.x + horizontalPadding, bounds.origin.y + verticalPadding, bounds.size.width - 2 * horizontalPadding, bounds.size.height - 2 * verticalPadding); [super setBounds:boundsWithInsets]; } 界限:

{{1}}

当我滑动进入编辑模式时,问题再次出现,我的所有单元格都松开了左边的填充(如@ Zerd1984所述)

我还应该提一下,我使用的TLIndexPathTools库当前没有更新来解决这个问题。