[英]Swift - UITableView in UIScrollView content inset incorrect with Autolayout
在我的UIViewController
我有一个UIScrollView
,然后有一个UITableView
。 即使没有UIScrollView
我的行为也很奇怪。 当我的ViewController
没有被子类化时,我的UITableView
( UITableView
)运行良好。 我将VC
子类化,然后TV
突然在navBar
下方滚动。 我所做的没有什么特别的事情,我可以看到会导致这种变化,但是由于这些年来我第一次使用AutoLayout,因此可能是我忽略的事情。 无论如何,然后我用以下方法手动修复了这个问题:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews();
var currentInsets: UIEdgeInsets = tableView.contentInset;
println("Inset from top", self.topLayoutGuide.length)
self.tableView.contentInset = UIEdgeInsets(top: self.topLayoutGuide.length, left: currentInsets.bottom, bottom: currentInsets.left, right: currentInsets.right);
}
一切都会按预期进行(即使我不必这样做)。 然后,我将SV
添加到组合中,事情又变得有些混乱了。 屏幕以y= -64
加载TV
,这恰好是它的“ Inset
设置的巧合(绝对不是巧合)。 触摸任意位置时,它会捕捉到y= 0
(应该始终捕捉到并开始于此位置),然后通过一点滚动它会捕捉到y= +49
。 如上所述, TV
似乎有3个捕捉点,但我不确定为什么。 SV
设置为具有滚动方向锁定和分页功能。 它的contentOffset
是screen height
(这就是为什么我不明白为什么会导致这些问题的原因)x 2 * screen width
。 如果我删除了对inset
手动修复, inset
预期,问题只会向上移动64。仅TV
报告了相同的高度0和-64(无法使其捕捉到+49),这是可以理解的不应在滚动委托中将插入项计入它的y滚动值。
无论如何,所以我绝对不知道为什么我的UIScrollView
UITableView
会发挥到最大程度。 我总是给人一种印象,即UIScrollView
会自动处理其直接子元素(包括TableViews
任何内容插图。
如果有人可以对此有所了解,我将不胜感激。
问候,
麦克风
更新 :此后,我发现的问题在于我在viewDidLayoutSubviews()
设置contentOffset
的方式,我目前正在这样做: scrollView.contentSize = CGSizeMake(self.view.frame.width * 2 , self.view.frame.height);
。 仍然不确定为什么仅这行代码会导致我遇到过许多问题。
最后使用UIPageViewController来实现我想要的功能,这比使用UIScrollView更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.