2013-04-10 30 views
1

我有可能是一個奇怪的VC結構,在這裏,我只是做了一個有點陌生,使其打破嵌入式的UIScrollView沒有加載其子視圖

的UIViewController(載有以下>)UIContainerView(嵌入 - >)的UIScrollView(包含 - > )UIView

我有最後的UIView,因爲我無法弄清楚如何使滾動視圖堅持一定的大小限制,所以我只是添加了「內容視圖」。

問題是,現在的「內容視圖的」數據沒有加載

的日誌的內容查看是:

<UIView: 0x81cd510; frame = (-306 0; 612 792); autoresize = TM+BM; layer = <CALayer: 0x81c2000>> 

的日誌滾動視圖是

<UIScrollView: 0x81e5e90; frame = (0 0; 0 0); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x81e67b0>; layer = <CALayer: 0x81e6060>; contentOffset: {0, 0}> 

所以它似乎沒有加載...什麼給了?如何讓它加載?

編輯澄清:

  • 所有這些觀點建立雖然IB
  • 不使用自動版式(雖然這聽起來很有趣)
  • 的NSLog的方法是在頂部稱爲ViewDidAppear在視圖 - 控制的視圖層次鏈。 (也許這就是問題?)

編輯:上傳的項目github上,使人們可以採取looksie https://github.com/Pinwheeler/ChiroMatic.git

+0

您可能需要澄清一下,或許告訴我們你是如何創建這些視圖(IB或編程),不管你是使用自動佈局或不,當你在'viewDidLoad'研究這些'frame'值(例如或'viewDidAppear',前者往往爲時過早如果視圖創建過程)等 – Rob 2013-04-10 01:31:55

+0

因此編輯好的先生(這個評論是否必要,或者您是否在我編輯它時收到通知?) – Pinwheeler 2013-04-10 02:21:26

+0

雖然它有點神祕,但如果你想要查看層次結構的完整描述,可以在'viewDidAppear'中放置一個斷點,然後在調試器中輸入以下命令:'po [[UIWindow keyWindow] recursiveDescription]'。這會向您顯示完整的視圖層次結構。無論如何,回到你原來的問題,根據你迄今共享的內容來診斷到底發生了什麼是不可能的。也許你可以壓縮你的項目並上傳到某個地方讓我們看看它。 – Rob 2013-04-10 02:33:55

回答

2

我花了相當多的時間,通過你的項目要和,令人沮喪的,我無法推斷出導致問題的原因。但我發現我能夠通過重新創建您的場景來解決問題(並且我不得不重新創建這兩個問題來解決問題)。我創建了一個項目分支並修復了這兩個場景。我試圖在源代碼以及git存儲庫提交註釋中註釋我的更改,所以希望您可以按照我所做的更改進行操作。我的叉子,請訪問:。

(只要讓我知道你要我刪除的回購協議,我很高興將其刪除,只要你想,因爲我認爲你不」不想我在GitHub上留下一個副本無限期)

一對夫婦的意見:

  1. 你說你不使用自動佈局,但你。 (轉到故事板上的第一個Document Inspector選項卡,您會看到「Use Autolayout」被選中。)如果您想使用它(它現在是Xcode中的默認設置),但是應該預先警告您失去了與iOS的向後兼容性如果您使用iOS 6之前的版本。 Autolayout功能強大,但當你第一次使用Autolayout時會非常棘手。這是你的電話。

  2. 在你PrintContentViewController,我最顯著的變化是使用標準的視圖控制器場景配置(其中頂層視圖是UIView),和我做了UIScrollView的一個子視圖。話雖如此,我認爲你不需要UIScrollViewUIView子視圖(如果你有中間的UIView,你會失去一些滾動視圖的功能,這是有問題的),所以我刪除了它,並製作了所有的標籤等滾動視圖本身的子視圖。

  3. 您使用的容器看法所有的地方,但它給我的印象,你要添加複雜的程度這是不必要的。 (而且,順便說一句,你不會有在你原來的問題提出的問題,如果你沒有使用這些容器的觀點。)當你想抽象與相關的邏輯

    定製容器是非常有用的容器視圖控制器從其子視圖控制器。但你在這裏沒有這樣做。更糟糕的是,您正在經歷各種旋轉以抓取子控制器的IBOutlet引用並更新容器控制器中的屬性。我衷心鼓勵您重新考慮您對這些容器視圖的使用,並完全從您的項目中刪除它們。

    如果你對容器視圖有一個引人注目的需求,可以很好地使用它們(我愛它們並且一直使用它們),但是在這裏我沒有看到它的任何需要,而且你讓生活更加美好爲自己複雜。

    另外,順便說一下,嵌入segue的使用僅限於iOS 6功能,如果您需要iOS 5向後兼容性,則可能會出現問題。

底線,我從來沒有能夠重現您的問題,當創建一個新的項目和鏡像你的故事板。我也無法通過對舊的PrintViewControllerPrintContainerViewController場景進行任何編輯來消除您的問題。當我重新創建這些場景時,我只能修復它,而當我這樣做時,它才起作用。

我在那裏留下了你的舊場景(用「舊」表示故事板不會混淆),所以也許你可以花時間弄清楚什麼是錯誤的,但我沒有看到它。也許在故事板中有一些錯誤可以逃避我。也許有一些設置我沒有看到。我所知道的是,當我剛剛重新創建它時,將控制器複製到我的兩個新場景中,它才起作用。

就我個人而言,我建議切開Gordian結,然後完全消除容器視圖。你的代碼會更乾淨,而這些問題不太可能導致他們醜陋的頭腦。

這不是一個令人滿意的結論(不知道是什麼導致了問題),但至少它似乎是固定的。祝你好運。

+0

我現在對你有一點不值得關注的愛。我真的很驚訝,你會花一天的時間來幫助我,因爲你的幫助,積極和正式的答案是不夠的。根據你的建議,我沒有和嵌入式Segue結婚,但我似乎無法在視圖之上拖出另一個視圖來模仿嵌入式Segue外觀。你會推薦什麼?有沒有什麼好的資源可以讓我指點一般,告訴我? – Pinwheeler 2013-04-14 15:31:47

+0

@Pinwheeler我不確定你的意思。考慮使用'PrintViewController'場景,只需從該場景中刪除容器視圖,拖出容器視圖的滾動視圖,適當調整大小,將其他場景的控件剪切並粘貼到新的滾動視圖中。一旦你這樣做了,你可以刪除那些手動設置所有這些屬性的代碼,'PrintViewController'就像故事板一樣被大大簡化,並且你完全消除了'PrintContainerViewController'。看到我上面的項目的「no-custom-container」分支。 – Rob 2013-04-14 17:48:43

+0

查看https://github.com/robertmryan/ChiroMatic/tree/no-custom-container – Rob 2013-04-14 17:54:25

相關問題