簡體   English   中英

在viewDidLoad中調用addSubView時的奇怪行為

[英]Odd behavior when calling addSubView in viewDidLoad

我已經在IB中創建了一個UIView ,當我將其添加到viewDidLoadUIViewController時,視圖的背景色更改為clearColor ,並且按鈕不可單擊(它們不接收觸摸)。 如果我嘗試在代碼中設置背景色,則不會發生任何事情。 看起來像這樣:

在此處輸入圖片說明

但是,如果我在viewWillAppear運行完全相同的代碼,它將正常顯示,並且可以單擊,如下所示:

在此處輸入圖片說明

該代碼很簡單,並且是viewDidLoad的唯一代碼(我在那里刪除了所有其他代碼,看是否是問題所在):

[myView setFrame:CGRectMake(0, 0, 320, 30)];
[self.view addSubview:myView];

我試過調用bringSubviewToFront ,但沒有執行任何操作。 有任何想法嗎?

其他注意事項:

  • UIView與視圖控制器的主視圖位於同一NIB中,並通過IBOutlet連接。

  • NIB文件是與視圖控制器分開創建的,並調用initWithNibName

  • 我已經在NIB文件中設置了自定義類和視圖出口,以匹配視圖控制器。

  • NIB文件的自動版式已關閉

  • 沒有情節提要

這里沒有足夠的信息可以確定,但是我想您的控制器已設置為在頂部欄后面擴展視圖。 我不相信諸如topLayoutGuide之類的topLayoutGuide布局的東西要等到viewDidLoad之后topLayoutGuide計算出來。

可能的解決方案:

  • 如果不需要,請取消選中視圖控制器上的“頂部欄下方的邊緣”。

  • viewDidLoad添加視圖,但將其放置在viewDidLayoutSubviews

  • 使用自動布局約束放置myView ,而不是顯式設置其框架。

這里的問題是,當您在viewDidLoad添加視圖時,我們不知道發生了什么。 僅僅知道它在viewWillAppear工作還不夠。 我們必須知道它沒有出現時的狀態。 為了實現這一目標,我提出:

盲目調試UIView技巧

實現以下內容(通常是結合使用)可以幫助診斷常見視圖問題的根源。

存在

  • 設置一個斷點。 碰到了嗎?
  • 是視圖非nil
  • 是否將其添加到超級視圖?
  • 超級視圖是否非零?
  • 超級視圖有-window嗎?

能見度

  • -hidden嗎?
  • 請問-clipsToBounds嗎?
  • 放大視圖。 現在可以看到嗎?
  • 讓它大了很多 現在怎么樣?
  • 將其中心設置為超級視圖的中心。
  • 使它變成鮮綠色。
  • 確保-alpha為1-ish。

層次結構

  • 視圖是子類嗎? 股票UIView可以代替嗎?
  • 是否使用類別擴展了任何視圖類?
  • 是否有任何視圖控制器生命周期方法( viewDidLoadviewWillAppearviewDidLayoutSubviews等)與視圖viewWillAppear
  • 您的視圖控制器是否在每個地方都應該調用superviewDidLoad等)?

遏制

  • 您的視圖控制器是否包含在其之上的另一個視圖控制器(例如, UINavigationControllerUITabBarController等)?
  • 您的視圖控制器-wantsFullscreenLayout嗎?
  • -edgesForExtendedLayout是否有邊緣?
  • 您可以嘗試在封閉范圍之外自行呈現視圖控制器嗎?

自動布局

  • 在日志/術語中是否遇到約束一致性錯誤?
  • 您是否設置了寬度/高度(或固有尺寸)?
  • -translatesAutoresizingMaskIntoConstraints是否設置正確?

Xcode

  • 您是否清理過項目並進行過重建?
  • 您是否已在模擬器中“重置內容和設置…”?
  • 您是否嘗試過模擬器和設備?
  • 您退出Xcode並重新啟動了嗎?
  • 您是否關閉計算機並重新啟動?
  • 您正在測試中嗎? 別搞了。

最低可行繁殖

  • 如果您使用新的視圖和視圖控制器創建一個新項目,問題是否仍然存在?
  • 如果您復制並粘貼您的筆尖/故事板?
  • 如果您復制並粘貼您的課程?

當他們來找我時,我會加更多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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