我有一个简单的设置,我在UINavigationController
中嵌入了一个视图控制器。在这个视图控制器上,我想显示彼此相邻的多个tableView
(水平)。我正在tableView
创建并添加viewDidLoad
s。除了y
之外,每个tableView
的位置都存在问题,但第一个问题除外。
以编程方式创建tableView
时,第一个tableView
始终正确显示在UINavigationBar
下方。但是,即使UINavigationBar
- 坐标在所有y
中等于0
,所有其他内容也会显示在tableView
的“后面”。
这是在模拟器上运行时的样子(注意tableView
本身有绿色backgroundColor
):
这是它的代码:
class ViewController: UIViewController {
var tableViews: [UITableView] = [] // maintained only for debugging purposes
override func viewDidLoad() {
super.viewDidLoad()
let tableViewCount: Int = 5
createTableViews(tableViewCount)
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
print(#function, tableViews)
}
func createTableView(count: Int) {
let width = Int(self.view.bounds.width)/count
for i in 0..<count {
let x = width * i
let y = 0
let height = Int(view.bounds.height)
let frame = CGRect(x: x, y: y , width: width, height: height)
let tableView = UITableView(frame: frame, style: UITableViewStyle.Plain)
tableView.backgroundColor = .greenColor()
tableView.dataSource = self
tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
view.addSubview(tableView)
tableView.tag = i
tableViews.append(tableView)
}
}
}
我只保留tableViews
属性,以便我可以在viewDidAppear
中打印它们。 viewDidAppear
中的控制台输出显示我的所有tableView
在其框架上具有相同的y
位置(= 0
)。
我确实找到了一个简单(但很难)的解决方法。我所要做的就是将第一个y
设置为0
,将其余设置为64
(状态栏的高度加上导航栏的高度)。像这样:
let y = i == 0 ? 0 : 64
有没有人知道为什么tableView
被错放了?根据我的理解,所有tableView
应显示在导航栏的正下方,因为这是视图控制器的view
的垂直原点?
答案 0 :(得分:1)
根据我的理解,所有tableView都应该显示在导航栏的正下方,因为这是视图控制器视图的垂直原点?
如果您设置myNavigationController.navigationBar.translucent = false
,这只是我的经验。如果导航栏是半透明的,则视图的顶部仍然是屏幕的顶部。
另一方面,你应该考虑通过自动布局来放置这些视图,而不是这个hacky帧数学。会简化你的代码。