在i手机或ipad的显示屏中央显示子视图

时间:2016-01-05 04:48:02

标签: ios swift uialertview addsubview

我正在设计一个警报视图,在该视图中,当用户点击特定按钮时,我会显示自定义视图。我正在使用滚动视图查看冗长的内容视图。我已经编写了与下面相同的代码。

我希望此警报视图显示在显示屏幕的中间,而不管滚动位置或内容视图位置如默认弹出窗口中的提示弹出。有没有办法做到这一点。我尝试了一种方法,但没有成功。

我找到的唯一解决方案是在显示之前滚动到顶部并添加子视图。由于这不完美,所以请提出一些措施或建议。感谢。

 @IBAction func forgotpassword(sender: AnyObject)
        {


                    blurEffect = UIBlurEffect(style: .Dark)
                    blurEffectView = UIVisualEffectView(effect: blurEffect)
                    blurEffectView.frame = self.contentview.bounds
                    blurEffectView.autoresizingMask = [.FlexibleWidth,.FlexibleHeight]



                    self.AlertVieww.frame.size = CGSizeMake(blurEffectView.frame.width-40, self.AlertVieww.frame.height)//AlertVieww is the IBOutlet of my custom view in scene dock

                    AlertVieww.center =  CGPointMake(UIScreen.mainScreen().bounds.size.width/2, UIScreen.mainScreen().bounds.size.height/2);



                    AlertVieww.autoresizingMask = [.FlexibleHeight,.FlexibleWidth]

                    blurEffectView.addSubview(self.AlertVieww)




               [self.scrollview.setContentOffset(CGPointZero, animated: false)]//I scroll to the top 

            UIView.transitionWithView(self.view, duration: 1.0, options: UIViewAnimationOptions.TransitionFlipFromBottom, animations:
                {


                self.contentview.addSubview(self.blurEffectView)

                }, completion: { finished in



                    self.scrollview.scrollEnabled = false

            })




        }
//These are two cnacel buttons in which I remove the views
 @IBAction func sendAlert(sender: AnyObject)
    {
        self.blurEffectView.hidden = true
        self.scrollview.scrollEnabled = true

    }

    @IBAction func cancelAlert(sender: AnyObject)
    {
        self.blurEffectView.hidden = true
        self.scrollview.scrollEnabled = true

    }

7 个答案:

答案 0 :(得分:1)

尝试一下 在最顶层的控制器视图中添加警报视图而不是blurEffectView并设置alertview的中心等于最顶层控制器的视图中心

喜欢,

 AlertVieww.center = UIApplication.sharedApplication().keyWindow?.rootViewController?.view.center
 UIApplication.sharedApplication().keyWindow?.rootViewController?.view.addSubview(self.AlertVieww)

答案 1 :(得分:0)

UIView * subview =你的观点以SuperView为中心;

UIView *superView = subview.superview;

subview.center = [superView convertPoint:superView.center
                                fromView:superView.superview];

如果view为nil(在fromView :)上,则此方法将从window base coordinates转换。否则,视图和接收者都必须属于同一个UIWindow对象。

注意:如果您使用自动布局内容,则必须更改约束。不是框架或中心

答案 2 :(得分:0)

这是一个解决方案

而不是self.view.frame.size.width

使用:: [UIScreen mainScreen] .bounds.size.width或height

所以代码是

UIView * View = [[UIView alloc] init]; View.frame = CGRectMake([UIScreen mainScreen] .bounds.size.width / 2,[UIScreen mainScreen] .bounds.size.height / 2,18,36); [self.view addSubview:View];

答案 3 :(得分:0)

在这里尝试这个也是为了制作cGpoint并根据你的主要观点:

view.center = CGPointMake(self.view.frame.size.width / 2,

                                         self.view.frame.size.height / 2);

答案 4 :(得分:0)

尝试这一个......! self.view.center = CGPointMake(CGRectGetMidX(self.parentView.bounds),                                        CGRectGetMidY(self.parentView.bounds));

答案 5 :(得分:0)

删除此代码

                AlertVieww.center =  CGPointMake(UIScreen.mainScreen().bounds.size.width/2, UIScreen.mainScreen().bounds.size.height/2);

添加此代码

AlertVieww.center = self.blurEffectView.center

            self.contentview.addSubview(self.blurEffectView)

答案 6 :(得分:0)

一种方法是创建自己的AlertController(继承自UIViewController)并在其xib中,将警报的所有视图与适当的约束放在一起,以便在iPhone上正确显示/ iPad,无论何时需要展示,只需将其显示在window上,如下所示。

  [window.rootViewController presentViewController:yourAlertControllerInstance animated:YES completion:nil];

OR

您可以使用此custom alert 。它具有多种风格以及后台BlurView,您可以根据需要自定义它。