iOS 一次验证cell的contentview和view作为控
2018-06-22 本文已影响17人
moxacist
tableview 作为每个项目不可或缺的控件,平常使用的非常多,很多时候都是照着以往或者网上的习惯用,但是遇到的问题也比较多。
在查看工程中代码时发现一个问题,同事中对于cell中的控件有的是加在contentview 上有的是直接加在cell上,我一时也比较懵逼,到底有什么区别,用的时候该怎么区分呢,就查看了相关文档
文档查阅流程:
- UITableViewCell的头文件里这么写的:
// If you want to customize cells by simply adding additional views, you should add them to the content view so they will be positioned appropriately as the cell transitions into and out of editing mode.
//如果只是想简单的添加视图到定制的cell上,应该加到contentview上目的是cell当处于编辑模式时,位置也是准确的
@property (nonatomic, readonly, strong) UIView *contentView;
这里可以看出,在编辑模式下有区别,
- developer document 里又补了一句刀
Discussion
The content view of a UITableViewCell object is the default superview for content displayed by the cell. If you want to customize cells by simply adding additional views, you should add them to the content view so they will be positioned appropriately as the cell transitions into and out of editing mode.
这里也说默认加在contentview上
- 根据网上查看的其他文章显示,设置backgroundcolor的和左滑删除的时候会位置不一样
现在用代码实验:
- 验证:cell内容向左移或者右移时,cell直接添加的子视图不会移动,contentview添加的可以。
- (nullable NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewRowAction *action = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal
title:@"取消"
handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
[tableView setEditing:NO animated:YES];
}];
UITableViewRowAction *action2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault
title:@"删除"
handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
[tableView setEditing:NO animated:YES];
}];
return @[action,action2];
}
//cell里
UIView *testView2 = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 50, 20)];
testView2.backgroundColor = [UIColor redColor];
[self addSubview:testView2];
UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(250, 10, 50, 20)];
testView.backgroundColor = [UIColor redColor];
[self.contentView addSubview:testView];
然鹅 效果是两种view都会正常滑动
image.png
以此判断对于这种模式两种添加都行(如果是我代码编写姿势错误,麻烦指针下哈)
- 验证:设置backgroundColor时,使用cell设置时左移或者右移颜色是不会变的,而用cell.contentView设置时,移动后的空白会显示cell的默认颜色,这种情况视实际情况选择。
这种没验证,因为一般移动后的展示控件会自己设置颜色,验证并无太大意义
-
验证accessrory时的不同
相同的结果
image.png
到这里 我懵逼了,看起来并没有任何使用时的区别,
应该还有些平常不常用的姿势 会让这两种方法有区别,比如动画??