通过导航栏考虑获取屏幕中心

时间:2018-05-04 17:16:21

标签: swift xcode uiview centering

我正在尝试将UIActivityIndi​​cator作为中心,并在整个应用中重复使用它。我正面临一个问题,我的一些观点必须在导航栏下面,有些则不是。这恰好使我的活动指示器在视图不在导航栏下的视图中低于中心呈现。例如:

enter image description here

StackOverflow上的所有答案似乎都属于图片#2。

我只是简单地对UIView进行了扩展,通过将其添加为子视图叠加来显示和隐藏活动指示器。检查StackOverflow上的多个帖子,我没有发现任何会复制此问题的内容。

我的问题是,在一个制作应用程序中,如何只使用一个功能成功地将这个视图集中在这两种情况中,但仍然支持IOS版本回到9.3

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)