1,当把一个ViewController放到Navi中时候
以前在开发时候遇到过这种情况, 将一个UIScrollView放到一个UIViewController上去, 结果UIScrollView怎么也调不出来, 将UITableView放到一个UIViewController上有时候也会出现类似的问题; 或者另一种情况, 将一个View放到UIViewController上时候, 有时候view是以UIWindow的 (0, 0) 为起点的, 有时候是以UINavigation的底部为起点的, 就是(0, 64).
我认为, 之所以会出现这些奇葩的问题, 兴许是xCode的小bug吧, 但是有个最简单的方法, 可以用一行代码解决上面所有的问题:
[self.view addSubview:[[UIView alloc] init]];
不让UIScrollView的子类作为self.view的第一个子控件, 就可以完美解决上面出现的两个问题.
2, UITableView presentViewController 时候延迟
问题是这样解决的:
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:viewController animated:YES completion:nil];
});
加上上面的一句话, 意思就是将presentViewController这个方法放在主线程的任务中执行. 这样就会在点击之后马上执行.
直接通过点击按钮弹出模态窗口就不会出现这样的问题, 出现这样问题的原因, 我认为可能是模态的的实现原理和UIScrollView
放在一起会产生一些冲突, 所以导致presentViewController
方法并不能直接开始执行, 或者在等待完成所有的配置工作, 而配置工作完成后没有很好的机制唤起presentViewController的执行, 所以, 将presentViewController方法放在一个异步线程中, 放在当前主线程任务的末尾, 就可以正常执行.
3, UIScrollView中的坑
我把一个放着轮播图片的scrollView放到一个view上面, 结果, 显示的效果如下图所示. 我设置的scrollView的frame和它父view大小是一模一样的, 但是, 当设置scrollView的背景色时候, 发现他们大小还是一模一样的, 但是scrollView得可滑动区域, 竟然如下图竖直进度条所示, 进度条已经到最顶了, 图片还是可以在上面一部分显示, 可以左右滑动, 也可以上下小幅度的滑动.
解决: 一行代码[self addSubview:[[UIView alloc] init]];
, 将scrollView放到view之前, 先在view上面放一个view, 就是不要让scrollView作为view的第一个子控件
, 这样可以避免很多不必要的麻烦.