美文网首页
tableViewCell 编辑模式下,UITableViewC

tableViewCell 编辑模式下,UITableViewC

作者: LiLi_哩哩 | 来源:发表于2019-04-25 16:54 被阅读0次

问题

别人建的Cell需要多选删除时出现UITableViewCellEditControl 被遮挡的情况,如下图:

被遮挡.png
debug发现.png

原因

经过排查发现时Cell布局代码有问题:
原来的代码在 -initWithStyle:reuseIdentifier: 方法中添加 subView,在 layoutSubviews 中对子控件进行布局, 并在设置 model 的时候调用 [self layoutIfNeeded]; 并触发 layoutSubviews

原代码没有调用[super layoutSubviews];

解决

经过把 layoutSubviews 中对子控件的布局移动到 layoutSubviews 方法后,问题解决。

layoutSubviews 的使用和调用时机

参考文档:

如果子控件的布局约束无法满足需求,需要对子控件更改布局时可以重写layoutSubviews,可以直接设置子控件的 frame 。
不能直接调用layoutSubviews。 如果要强制进行布局更新,请在下次绘图更新之前调用 setNeedsLayout 方法。 如果要立即更新视图的布局,请调用layoutIfNeeded方法。

Subclasses can override this method as needed to perform more precise layout of their subviews. You should override this method only if the autoresizing and constraint-based behaviors of the subviews do not offer the behavior you want. You can use your implementation to set the frame rectangles of your subviews directly.
You should not call this method directly. If you want to force a layout update, call thesetNeedsLayoutmethod instead to do so prior to the next drawing update. If you want to update the layout of your views immediately, call the layoutIfNeeded method.

调用时机

1、init初始化不会触发layoutSubviews
2、addSubview会触发layoutSubviews,如果添加的子控件没有 Frame ,不会调用;
3、设置 view 的 Frame 会触发layoutSubviews,当然前提是frame的值设置前后发生了变化且该 View 已经被添加到父控件;
4、滚动一个 UIScrollView 会触发 layoutSubviews ,因滚动 UIScrollView ,其子控件肯定对应会刷新,也就肯定会被调用;
5、旋转 Screen 会触发控制器对应 UIView 上的 layoutSubviews 事件;
总结:改变子控件就会调用父类的方法;

注:在一个方法内连续调(主动调用或者系统隐式调用),都只会调一次layoutSubviews;

参考文档:layoutSubviews 调用时机

相关文章

  • tableViewCell 编辑模式下,UITableViewC

    问题 别人建的Cell需要多选删除时出现UITableViewCellEditControl 被遮挡的情况,如下...

  • iOS UITableViewCell 高度的缓存

    关于如何让 tableViewCell的高度 给缓存起来 1.在网上看了很多人写的 关于 UITableViewC...

  • TableviewCell在编辑模式下的多选按钮自定义

    在编辑模式下,如果我们启用多选模式,系统则会为我们配上原生的选择按钮。但这往往是不符合UI要求的,如此我们便需要对...

  • vi

    vi编辑器支持编辑模式和命令模式,编辑模式下可以完成文本的编辑功能,命令模式下可以完成对文件的操作命令,要正确使用...

  • Linux vi编辑器的使用

    vi有编辑模式和命令模式,编辑模式下修改文件,命令模式下输入指令打开文件指令:vi filename按下i或a 进...

  • linux-4-vi 文本编辑器

    在编辑模式下(刚打开文件,或者按下ESC退回到编辑模式的情形):

  • vim 编辑模式

    一. Vim的工作模式 a. 命令模式下:按i或a进入编辑模式;按:/?进入末行模式b. 编辑模式下:按Esc进入...

  • 点cell会移动到tableview的第一行

    参考:iOS_UITableView 编辑(cell的插入, 删除, 移动) 获取tableviewCell在当前...

  • Juypter快捷键 & 设置

    Juypter 分为编辑(edit)模式以及命令(command)模式。在编辑模式下,使用Esc可以退出并进入命令...

  • UITableView编辑模式

    UITableView有两种模式,普通模式和编辑模式。在编辑模式下可以对cell进行排序、删除、插入等等。 如何进...

网友评论

      本文标题:tableViewCell 编辑模式下,UITableViewC

      本文链接:https://www.haomeiwen.com/subject/beyzgqtx.html