我正在尝试将UIActivityIndicator作为中心,并在整个应用中重复使用它。我正面临一个问题,我的一些观点必须在导航栏下面,有些则不是。这恰好使我的活动指示器在视图不在导航栏下的视图中低于中心呈现。例如:
StackOverflow上的所有答案似乎都属于图片#2。
我只是简单地对UIView进行了扩展,通过将其添加为子视图叠加来显示和隐藏活动指示器。检查StackOverflow上的多个帖子,我没有发现任何会复制此问题的内容。
我的问题是,在一个制作应用程序中,如何只使用一个功能成功地将这个视图集中在这两种情况中,但仍然支持IOS版本回到9.3
答案 0 :(得分:7)
SWIFT 3:
扩展程序将子视图集中在您的App代理人的keyWindow中......无论您的应用程序位于何处,都将其置于中心位置:
Cell cellToUpdate = sheet.getRow(0).getCell(0);
答案 1 :(得分:5)
你可以获得屏幕高度+顶部和底部
var height: CGFloat {
let heightTop = UIApplication.shared.statusBarFrame.height + (
(self.navigationController?.navigationBar.intrinsicContentSize.height) ?? 0)
let heightBottom = self.tabBarController?.tabBar.frame.height ?? 0
return UIScreen.main.bounds.height + (heightTop+heightBottom)
}
//然后
indicator.center = CGPoint(x: self.view.frame.width/2.0, y: height/2.0 )
您可以使用safeAreaLayoutGuide
它为您提供可见屏幕区域
let indicator: UIActivityIndicatorView = {
let indicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
indicator.translatesAutoresizingMaskIntoConstraints = false
return indicator
}()
self.view.addSubview(indicator)
let safeAreaGuide = self.view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
indicator.centerXAnchor.constraint(equalTo: saveAreaGuide.centerXAnchor),
indicator.centerYAnchor.constraint(equalTo: saveAreaGuide.centerYAnchor)
])
答案 2 :(得分:-1)
您可以使用此功能:
func setActivityIndicatorTo(view: UIView, indicator: UIActivityIndicatorView){
indicator.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addConstraint(NSLayoutConstraint(item: indicator, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: indicator, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0))
}
或者你可以在下面找到屏幕中心:
let w = UIScreen.main.bounds.width
let h = UIScreen.main.bounds.height
activity.center = CGPoint(x: w / 2, y: h / 2)