我的activityIndi​​cator没有调整大小

时间:2015-08-07 08:41:34

标签: ios xcode swift uiactivityindicatorview

我的登录功能有一个activityIndi​​cator,但是当我旋转设备时,我的activityIndi​​cator不会调整大小。 这是我的登录功能代码,从我称之为。

@IBAction func login(sender: AnyObject) {
    var valid: Bool = false
    self.viewUtils.showActivityIndicator(self.view)
    username =  userField.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
    password = passwordTextField.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())


        if (self.username.isEmpty || self.password.isEmpty){
            self.showAlert("Inserte usuario password")
        }
        else{

            var user = UserFunction()
            dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)){
                valid = user.userValid(self.username,password: self.password)

                dispatch_async(dispatch_get_main_queue()){
                    if valid {
                        self.performSegueWithIdentifier("showTable", sender: self )}
                    else{
                    self.showAlert("usuario incorrecto")

                    }


                }
            }
    }
}

这是我的展示代码:

func showActivityIndicator(uiView: UIView){
    container.frame = uiView.frame
    container.center = uiView.center
    container.backgroundColor = UIColorFromHex(0xffffff, alpha: 0.3)

    loadingView.frame = CGRectMake(0, 0, 80, 80)
    activityIndicator.autoresizingMask =  UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.FlexibleRightMargin
    loadingView.center = uiView.center
    loadingView.backgroundColor = UIColorFromHex(0x444444, alpha: 0.7)
    loadingView.clipsToBounds = true
    loadingView.layer.cornerRadius = 10

    activityIndicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.WhiteLarge
    activityIndicator.center = CGPointMake(loadingView.frame.size.width / 2, loadingView.frame.size.height / 2);

    loadingView.addSubview(activityIndicator)
    container.addSubview(loadingView) 
    uiView.addSubview(container)

    activityIndicator.startAnimating()

}

enter image description here

2 个答案:

答案 0 :(得分:0)

由于您编写的上述代码段没有NSLayoutConstraint,因此最短的解决方案是回复:

- viewWillTransitionToSize:withTransitionCoordinator

故事板解决方案

更优雅的解决方案是使用Storyboard + Autolayout 3行代码,1是可选的:

func showActivityIndicator(uiView: UIView){
    self.view.bringSubviewToFront(loadingView); // Only if covered
    loadingView.hidden = false
    activityIndicator.startAnimating()
}

enter image description here

您可以将圆角,颜色等移动到-viewDidLoad

loadingView.clipsToBounds = true
loadingView.layer.cornerRadius = 10

答案 1 :(得分:0)

以这种方式为您的activityIndi​​cator定义布局约束:

activityIndicator.translatesAutoresizingMaskIntoConstraints = NO;    
[activityIndicator addConstraint:[NSLayoutConstraint constraintWithItem: activityIndicator
                                 attribute:NSLayoutAttributeCenterX
                                 relatedBy:NSLayoutRelationEqual
                                    toItem: container
                                 attribute:NSLayoutAttributeCenterX
                                multiplier:1.f constant:0.f]]];

[activityIndicator addConstraint:[NSLayoutConstraint constraintWithItem: activityIndicator
                             attribute:NSLayoutAttributeCenterY
                             relatedBy:NSLayoutRelationEqual
                                toItem: container
                             attribute:NSLayoutAttributeCenterY
                            multiplier:1.f constant:0.f]]];