2016-02-27 54 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名稱而不是視圖。 –