2016-02-27 52 views
0

我想通过编程设计屏幕。首先,我设置导航栏。之后,我添加一个表格视图,然后添加一个普通的UIView。我在使用.center这个最后添加的UIView时遇到问题。我想为此视图添加UIActivityIndicatorView。我的代码如下所示(使用默认的高度和大的白色活动指示灯的宽度,这是37pt每个):UIView中心属性给人意想不到的结果

func setupActivityView() { 
    let screen = UIScreen.mainScreen().bounds 
    let view = UIView(frame: CGRectMake(0.0, self.navbar.frame.height, screen.width, UIScreen.mainScreen().bounds.height-self.navbar.frame.height)) 
    view.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.80) 
    //view.hidden = true 
    self.activityView = view 
    self.view.addSubview(view) 

    let spinner = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge) 
    spinner.startAnimating() 
    spinner.hidesWhenStopped = true 
    self.spinner = spinner 
    /*POINT:1*/ //spinner.center = view.center 
    /*POINT:2*/ //spinner.frame.size = CGSizeMake(37.0, 37.0) 
    /*POINT:3*/ spinner.frame = CGRectMake((view.frame.width/2) - 18.5, (view.frame.height/2) - 18.5, 37.0, 37.0) 
    view.addSubview(spinner) 
} 

在上面的代码,如果你仔细看,我有评论POINT:1POINT:2和使用POINT:3。这给了我下面的结果(这是正确的,并如预期):

enter image description here

现在,当我使用POINT:1POINT:2和评论POINT-3如下:

func setupActivityView() { 
    let screen = UIScreen.mainScreen().bounds 
    let view = UIView(frame: CGRectMake(0.0, self.navbar.frame.height, screen.width, UIScreen.mainScreen().bounds.height-self.navbar.frame.height)) 
    view.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.80) 
    //view.hidden = true 
    self.activityView = view 
    self.view.addSubview(view) 

    let spinner = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge) 
    spinner.startAnimating() 
    spinner.hidesWhenStopped = true 
    self.spinner = spinner 
    /*POINT:1*/ spinner.center = view.center 
    /*POINT:2*/ spinner.frame.size = CGSizeMake(37.0, 37.0) 
    /*POINT:3*/ //spinner.frame = CGRectMake((view.frame.width/2) - 18.5, (view.frame.height/2) - 18.5, 37.0, 37.0) 
    view.addSubview(spinner) 
} 

我得到下面的结果(这是,我想,错误的和意想不到的):

enter image description here

那么究竟我的两种方法有什么区别,这里究竟发生了什么错误?我对这两种方法的理解是错误的吗?如果是,那么究竟发生了什么?

+0

你在哪里做了分配这里面的观点做了加载? –

+0

是的。我在'viewDidLoad'里面调用这个函数' –

+0

现在你可以试试我的答案bro @The Rohan Sanap –

回答

0
  1. viewDidLoad中

    在这种方法中视图的宽度和高度,你将无法正常。你可以用 打印视图的宽度和高度,然后你就会知道原因。

  2. ViewDidAppear

    viewDidAppear当视图实际可见被调用,所以你 代码必须放在这里//检查它现在

+0

曾尝试在'viewDidAppear'而不是'viewDidLoad'中调用该方法。相同的结果... –

+0

@ TheRohanSanap不仅单一的代码,你的整个代码? –

+0

并更改uiview名称而不是视图。 –