iOS:由于在CellForRowAtIndexPath中运行时设置约束,TableView无法平滑滚动

时间:2015-06-05 06:48:41

标签: ios objective-c uitableview ios-autolayout viewdidlayoutsubviews

我正在使用StoryBoard和使用Autolayout,我在自定义单元格的运行时设置了约束。我也在 ViewDidLayoutSubviews 中设置了约束来处理设备方向。所以这需要时间来配置Cell并且我的单元格不是平滑滚动。任何人都可以帮我这个吗?如果我不在运行时设置约束,那么我应该在哪里设置它们?希望我是Clear.Thanks提前

2 个答案:

答案 0 :(得分:0)

我和nburk在一起,用这个简短的细节来解决是不可能的。但是因为你在tableView中使用自定义单元格。每次创建单元格时,在cellForRowAtIndexPath方法中都可以使用  dispatch_async(dispatch_get_main_queue(),^ {......这里的代码用于自定义单元格.....}); //用于更新UI  我不确定但是因为你的线条显示屏幕UI没有及时更新。

答案 1 :(得分:0)

我建议你定义一个UITableViewCell的子类,并在init / initWithCoder:方法中创建所有约束。

不要忘记正确地重复使用细胞。通过这种方式,您不会一直重新创建单元格的约束。

编辑:看一下下面的例子。

static NSString* const kCellIdentifier = @"CustomTableViewCellIdentifier";

@implementation CustomTableViewController

- (void)viewDidLoad
{
    [self.tableView registerClass:[CustomTableViewCell class] forCellReuseIdentifier:kCellIdentifier];
}

- (UITableViewCell*) tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
    CustomTableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier];
    // configure your cell here
    return cell;
}

@end


@interface CustomTableViewCell: UITableViewCell
@end

@implementation CustomTableViewCell

- (instancetype) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier
{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])
    {
        // add subviews and install constraints here. Don't forget to use contentView instead of cell when you install constraints.
    }

    return self;
}

@end