[英]Add children view controller in a controller that pushed in a navigation controller
我有一個名為ViewController的簡單視圖控制器,它位於導航堆棧中,其結構如下所示:
UINavigationControlelr
UIViewController
ViewController
ViewController有一個稱為a的子視圖控制器,我在ViewController中添加了一個,其框架是ViewController的邊界。 我還有兩個UIViewController,分別稱為b和c,我將b和c添加到了a中。 b的框架是
CGRect(x: 0, y: 0, width: 100, height: 100)
c的框架是
CGRect(x: 0, y: 100, width: 100, height: 100)
如果將導航欄半透明設置為true,則視圖顯示為正確,如下所示:
但是,當我將導航欄半透明設置為false時,發生了一些奇怪的事情。
這是怎么回事。 如何解決這個問題? 該項目很簡單,您也可以從這里下載以測試問題: 下載
您正在viewDidLoad
中設置視圖框架,請注意,視圖布局要等到很久以后才能完成。 在布局發生之前和之后分別調用viewWillLayoutSubviews
和viewDidLayoutSubviews
)。
將您的框架設置代碼移動到viewDidLayoutSubviews
,它將正常工作。
注意::您也可以在viewWillAppear
設置視圖的框架,但這是設置框架的正確位置。 viewWillAppear
在視圖即將出現之前被調用,視圖布局可以在視圖出現后改變(例如,響應於設備旋轉)。
問題的
原因是默認情況下, UIViewController
的view
具有FlexibleWidth
和FlexibleHeight
bController
和cController
的view
有64像素的額外間隙(navBar(44)+狀態欄(20))。 現在,當您調整大小時,可以使用那些“ FlexibleWidth &
FlexibleHeight”。
解決方法可能是將autoresizingMask
為.None
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.greenColor()
bController = b()
cController = c()
bController.view.autoresizingMask = .None
cController.view.autoresizingMask = .None
displayContentController(bController, toFrame: CGRect(x: 0, y: 0, width: 100, height: 100))
displayContentController(cController, toFrame: CGRect(x: 0, y: 100, width: 100, height: 100))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.