簡體   English   中英

在推入導航控制器的控制器中添加子視圖控制器

[英]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中設置視圖框架,請注意,視圖布局要等到很久以后才能完成。 在布局發生之前和之后分別調用viewWillLayoutSubviewsviewDidLayoutSubviews )。

將您的框架設置代碼移動到viewDidLayoutSubviews ,它將正常工作。

注意::您也可以在viewWillAppear設置視圖的框架,但這是設置框架的正確位置。 viewWillAppear在視圖即將出現之前被調用,視圖布局可以在視圖出現后改變(例如,響應於設備旋轉)。

問題的 原因是默認情況下, UIViewControllerview具有FlexibleWidthFlexibleHeight

bControllercControllerview有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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM