2012-09-15 23 views
3

我想將UIViewController中的現有視圖更改爲新視圖。新視圖包含舊視圖和一個小橫幅視圖。用新的UIView替換self.view顯示黑色視圖

做這個相當簡單的改變留給我一個黑色的視圖。

我的代碼看起來像這樣

UIView *existingView = self.view; 
UIView *newView = [[UIView alloc] initWithFrame:existingView.frame]; 
UIView *bannerView = [[UIView alloc] initWithFrame:CGRectMake(0, (self.view.frame.size.height - 50), 320, 50)]; 

CGRect existingViewFrame = existingView.frame; 
existingViewFrame.size.height -= 50; 
existingView.frame = existingViewFrame; 

[newView addSubview:existingView]; 
[newView addSubview:bannerView]; 

self.view = newView; 

然而,當切換標籤,然後回來給它改變了景觀的照片顯示,就像我想要的。我想我需要設置一個標誌或一些東西來告訴控制器重繪它的(新)視圖。

編輯

我寫了這個問題的一個簡單的例子。你可以在GitHub上找到它:https://github.com/Oemera/ChangeView

+0

爲了強制視圖重繪,最後只需調用'[self.view setNeedsDisplay]'。這應該夠了吧。 – George

+0

嘗試,但它不起作用。還試過'[self.view layoutIfNeeded]',但它也不能像我所希望的那樣工作。還有其他建議嗎? – OemerA

+0

在任何地方改變根視圖,但loadView是混亂的,你試圖用這個來實現什麼?有可能更好的方法來做 – wattson12

回答

0

你沒有說你在哪裏做這件事。可能需要保存原始視圖的超級視圖,然後將新視圖添加到該視圖的子視圖數組中。我敢打賭,這是問題。

+0

我在委託方法中做了這個。每次加載iAd標題時,都會調用此方法。在loadView之後改變給定狀態下的根視圖似乎不是一個好主意。我現在改變了這種行爲。如果你想看到顯示黑屏視圖的「破」代碼簽出GitHub倉庫。 – OemerA

+0

我現在看不到你的代碼,但是如果你在設置self.view.superview的時候設置了self.view = new view,你肯定應該斷言或者打印巨大的調試信息。此外,系統設置self.view.window,因此不確定是否需要與窗口屬性混帳。如果你在SO上搜索,你可能會發現一個特定的QnA,以便如何換出viewController的視圖。我只在viewDidLoad之後才做這件事。 –