【问题标题】:Center a UIActivityIndicatorView for a UITableViewController in the window, not in the table view将 UITableViewController 的 UIActivityIndicatorView 居中在窗口中,而不是在表格视图中
【发布时间】:2017-01-27 02:54:36
【问题描述】:
我在界面设计器中的表格视图中有一个UIActivityIndicatorView。我正在尝试使用以下方法将其置于屏幕中间:
override func viewWillLayoutSubviews() {
self.activityView.center = self.view.center
}
但它似乎总是在页面上太“低”,它似乎位于 UITableView 的中间,而不是像我想要的那样位于窗口中间(即它被导航栏等)
【问题讨论】:
标签:
ios
swift
uitableview
uiactivityindicatorview
【解决方案1】:
解决方案是将activityView 框架设置为视图的边界。仅设置中心不起作用,因为 tableView 框架的 y 值为负数。
override func viewWillLayoutSubviews() {
self.activityView.translatesAutoresizingMaskIntoConstraints = true
self.activityView.frame = self.view.bounds
}
【解决方案2】:
使用自动布局,您可以使用layoutMarginsGuide 在UITableViews 和UICollectionViews 中获得正确的中心X、Y 锚点:
activityView.translatesAutoresizingMaskIntoConstraints = false
activityView.centerXAnchor.constraint(equalTo: view.layoutMarginsGuide.centerXAnchor).isActive = true
activityView.centerYAnchor.constraint(equalTo: view.layoutMarginsGuide.centerYAnchor).isActive = true
【解决方案3】:
你试过了吗:
self.activityView.center = self.view.window?.center
如果没有,那该怎么办:
let screenSize = UIScreen.main.bounds
self.activityView.center = CGPoint(x: screenSize.width / 2, y: screenSize.height / 2)
它有点长,但可以很好地处理通话状态栏。