本人先说下问题,首先本人有两个表视图,第一个本人称之为 MainTableViewController, 第二个为 ChatPopViewcontroller. 本人在 MTVC 中随便设置了个静态表和一个单元格,用于推出 CPVC. 利用 storyboard设计, CPVC 中主要用于聊天气泡的展示.问题来了:本人先要的想要的效果是MTVC 推出 CPVC 时, CPVC有两屏的聊天气泡,一推出就滚动到底端,怎么实现?滚动方法先叫为”scrollToLastCell”;本人在 CPVC 中的 viewWillAppear 中调用该方法,为什么不起效果?但放在 viewDidAppear 中的话,效果是推出了才滚动…
解决方案:10分
你的CPVC是不是用了autolayout?
autolayout是异步的,在viewWillAppear方法中界面还没渲染好,你这个时候滚动是没用的
viewDidAppear表示界面已经显示完了,布局肯定也已经布好了,所以这时候有效
建议把scrollToLastCell放在viewDidLayoutSubviews这个方法中.
autolayout是异步的,在viewWillAppear方法中界面还没渲染好,你这个时候滚动是没用的
viewDidAppear表示界面已经显示完了,布局肯定也已经布好了,所以这时候有效
建议把scrollToLastCell放在viewDidLayoutSubviews这个方法中.
解决方案:10分
viewWillAppear只是通知你视图即将被加载进窗口
viewDidAppear是告诉你全部的视图已经全部加载进窗口
原因是autolayout是相对布局的,在使用autolayout的时候你必须等到全部视图都加载完成你才能知道各个视图的真实位置
例如有两个button,b1和b2,b2与b1的间距为10,那么你肯定要等确定了b1的位置之后你才能知道b2的真实位置
在没有使用autolayout的时候布局都是使用绝对位置来写的,也就是b2.frame=CGRectMake…这种方式,这种给的就是真实的位置,一般都是在viewDidload方法中创建视图并指定frame,所以在viewWillAppear中他也能知道每个视图的真实位置(原因是viewDidLoad方法在生命周期中比viewWillAppear更早被调用)
viewDidAppear是告诉你全部的视图已经全部加载进窗口
原因是autolayout是相对布局的,在使用autolayout的时候你必须等到全部视图都加载完成你才能知道各个视图的真实位置
例如有两个button,b1和b2,b2与b1的间距为10,那么你肯定要等确定了b1的位置之后你才能知道b2的真实位置
在没有使用autolayout的时候布局都是使用绝对位置来写的,也就是b2.frame=CGRectMake…这种方式,这种给的就是真实的位置,一般都是在viewDidload方法中创建视图并指定frame,所以在viewWillAppear中他也能知道每个视图的真实位置(原因是viewDidLoad方法在生命周期中比viewWillAppear更早被调用)