UITableViewWrapperView

UITableViewWrapperView

我正在建立聊天。一切似乎都还不错,但我遇到了“ buggy ”问题。

我得到了带有UITextView栏的UIViewController,用于输入消息和UITableView。
它们处于此约束中:"V:|-(64)-[chatTable][sendMessageBar]-(keyboard)-|"
当键盘没有伸出时,此约束的常量为0。在键盘熄灭后-我将常数增加到键盘高度。

当键盘没有伸出时:

self.table.contentSize = (375.0,78.5)
self.table.bounds = (0.0,-490.0,375.0,568.5)
self.table.frame = (0.0,64.0,375.0,568.5)
self.table.subviews[0].frame (UITableViewWrapperView) = (0.0,0.0,375.0,568.5)
self.table.subviews[0].frame (UITableViewWrapperView) = (0.0,0.0,375.0,568.5)

当键盘出来时:
self.table.contentSize = (375.0,78.5)
self.table.bounds = (0.0,-274.0,375.0,352.5
self.table.frame = (0.0,64.0,375.0,352.5)
self.table.subviews[0].frame (UITableViewWrapperView) = (0.0,-137.5,375.0,137.5)
self.table.subviews[0].frame (UITableViewWrapperView) = (0.0,0.0,375.0,137.5)

因此,在增加约束常量之后,UITableViewWrapperView的大小与其父 View UITableView有所不同。有没有办法来解决这个问题 ?我假设UITableViewWrapperView将根据UITableView更改其框架和范围,但不会。

有任何想法可以解决问题,或者我应该如何解决?

添加:

经过更多研究-似乎它发生在viewWillLayoutSubviewsviewDidLayoutSubviews之间。这有点奇怪:
override func viewWillLayoutSubviews() {
    println("WrapperView Frame :991: \(self.table.subviews[0].frame)") \\ WrapperView Frame :991: (0.0,0.0,375.0,568.5)
    super.viewWillLayoutSubviews()
    println("WrapperView Frame :992: \(self.table.subviews[0].frame)") \\ WrapperView Frame :992: (0.0,0.0,375.0,568.5)
}

override func viewDidLayoutSubviews() {
    println("WrapperView Frame :6: \(self.table.subviews[0].frame)") \\ WrapperView Frame :6: (0.0,-137.5,375.0,137.5)
    super.viewDidLayoutSubviews()
    println(">> viewDidLayoutSubviews")
}

因此,似乎发生了一些事情,使UITableViewWrapperView困惑

最佳答案

以下为我修复了它:

func fixTableViewInsets() {
    let zContentInsets = UIEdgeInsetsZero
    tableView.contentInset = zContentInsets
    tableView.scrollIndicatorInsets = zContentInsets
}

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    fixTableViewInsets()
}

我发现在viewWillAppear()上插入全部为0。但是在viewDidAppear()上,它们已被修改为导航栏等的明显偏移。这使UITableViewWrapperView与UITableView不同。
我在自己的例程中更改了插图,以便更轻松地尝试从不同的地方调用它。 viewWillLayoutSubviews()可以在呈现之前对其进行更改-将更改放置在viewDidAppear()中会导致表发生故障。

10-08 15:40