ios - UITableViewWrapperView 和 UITableView 大小与自动布局不同

标签 ios uitableview swift

我正在建立一个聊天室。一切似乎都很好,但我遇到了某种“错误”问题。

我得到了带有用于输入消息的 UITextView 栏和 UITableView 的 UIViewController。 它们处于此约束中:"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() 中 insets 都是 0。但是在 viewDidAppear() 中,它们被修改为明显偏移导航栏等。这使得 UITableViewWrapperView 与 UITableView 不同。 我更改了它自己的例程中的插图,以便更容易地尝试从不同的地方调用它。 viewWillLayoutSubviews() 让它在呈现之前进行更改 - 将更改放在 viewDidAppear() 中会导致表格摇晃。

关于ios - UITableViewWrapperView 和 UITableView 大小与自动布局不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27671324/

相关文章:

ios - 移动应用程序数据管理

ios - 仪器中的时间分析器不工作

ios - 如何在UITableView的编辑模式下仅显示复选标记选择而不选择整个UITableViewCell?

swift - 如何将 View TableViewCell 转换为 UIGestureView

uitableview - 无法在 UITableView 编辑模式下删除按钮

iphone - Facebook iOS SDK 崩溃

ios - 延迟加载 UIScrollView - 如何使滚动更平滑

ios - 数据未填充到 TableView

ios - 循环结束后如何调用函数?

swift - 无法分配给属性 : 'card' is a 'let' constant in a for loop in swift