我正在建立一个聊天室。一切似乎都很好,但我遇到了某种“错误”问题。
我得到了带有用于输入消息的 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
更改其框架和边界,但事实并非如此。
有什么想法是哪里出了问题,或者我该如何解决?
添加:
经过更多研究 - 它似乎发生在 viewWillLayoutSubviews
和 viewDidLayoutSubviews
之间。这有点奇怪:
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/