我目前UIAlertController正在屏幕上显示。警报的视图应仅在警报中心显示2个元素,一个标题和一个UIActivityIndicatorView。下面是显示警报及其元素的功能。
UIAlertController
UIActivityIndicatorView
func displaySignUpPendingAlert() -> UIAlertController { //Create the UIAlertController let pending = UIAlertController(title: "Creating New User", message: nil, preferredStyle: .Alert) //Create the activity indicator to display in it. let indicator = UIActivityIndicatorView(frame: CGRectMake(pending.view.frame.width / 2.0, pending.view.frame.height / 2.0, 20.0, 20.0)) indicator.center = CGPointMake(pending.view.frame.width / 2.0, pending.view.frame.height / 2.0) //Add the activity indicator to the alert's view pending.view.addSubview(indicator) //Start animating indicator.startAnimating() self.presentViewController(pending, animated: true, completion: nil) return pending }
但是,活动指示器不会显示在视图中心,实际上它显示在屏幕的右下角,离视图很远。这是什么原因呢?
编辑:我知道我可以为指标的位置硬编码数字,但是我希望警报在具有多种屏幕尺寸和方向的多种设备上运行。
创建视图时,请务必设置frame属性。
func displaySignUpPendingAlert() -> UIAlertController { //create an alert controller let pending = UIAlertController(title: "Creating New User", message: nil, preferredStyle: .Alert) //create an activity indicator let indicator = UIActivityIndicatorView(frame: pending.view.bounds) indicator.autoresizingMask = [.flexibleWidth, .flexibleHeight] //add the activity indicator as a subview of the alert controller's view pending.view.addSubview(indicator) indicator.isUserInteractionEnabled = false // required otherwise if there buttons in the UIAlertController you will not be able to press them indicator.startAnimating() self.presentViewController(pending, animated: true, completion: nil) return pending }
到@ 62Shark:
let pending = UIAlertController(title: "Creating New User", message: nil, preferredStyle: .Alert) let indicator = UIActivityIndicatorView() indicator.setTranslatesAutoresizingMaskIntoConstraints(false) pending.view.addSubview(indicator) let views = ["pending" : pending.view, "indicator" : indicator] var constraints = NSLayoutConstraint.constraintsWithVisualFormat("V:[indicator]-(-50)-|", options: nil, metrics: nil, views: views) constraints += NSLayoutConstraint.constraintsWithVisualFormat("H:|[indicator]|", options: nil, metrics: nil, views: views) pending.view.addConstraints(constraints) indicator.userInteractionEnabled = false indicator.startAnimating() self.presentViewController(pending, animated: true, completion: nil)