2017-10-06 78 views
0

我正在研究一個練習應用程序,其中用戶界面取決於練習的類型。一些練習將問題作爲文本和答案作爲文本。一些練習將問題作爲文本和答案作爲圖像。還有一個變化是圖像和文字的問題和答案中的圖像。我根據從API獲得的值爲特定練習創建一個問題對象。該對象具有許多可選的字段。例如,圖像是可選的。現在我面臨的挑戰是處理這種動態UI的最佳方式是什麼。用簡單的英語,如果它有圖像,顯示imageView,如果它沒有圖像,則不要顯示imageView並相應地調整其他UI元素。相同視圖控制器的UI的多個變體

回答

1

您可以擁有一個UIViewController子類和許多不同的故事板,每個故事板都有不同的佈局和子視圖。

  • 每個故事板都將視圖控制器的類設置爲身份檢查器中的自定義類。

  • 您的視圖控制器具有所有可能的子視圖的出口,並且每個故事板將其子視圖連接到與其相關的出口。

  • 當您需要呈現字符串的特定變體時,您可以從特定於案例的故事板(以編程方式或使用segues和storyboard引用)實例化視圖控制器。


如果您只需要在一種情況下禁用一個特定的子視圖,您可以執行下列操作之一:

  • 設置子視圖的isHidden屬性false。它會留在原地,並佔據同一區域,但看不見。
  • 通過致電removeFromSuperview()將其從主視圖中刪除。但是,如果其他剩餘的子視圖依賴於針對其佈局移除的子視圖的約束,請注意。
+0

非常感謝您的回覆。但我有個問題。假設您有兩種視圖變體:一種是imageView,另一種是沒有imageView的。如果我們爲它創建兩個故事板,是不是會矯枉過正?因爲其餘的東西都是一樣的,但是我們仍然會爲它們創建重複的出口,因爲它們在不同的故事板中。如果我在錯誤的方向思考,請糾正我。 –

+0

在這種特殊情況下,你可以做幾件事情,比如將'isHidden'屬性的值更改爲'false',將它從超級視圖中移除(這會影響其他子視圖的自動佈局成本)。查看更新後的答案。 –

+0

isHidden解決方案的問題是它仍然佔據空間,它不會顯示它。如果我想去removeFromSuperview路線,我必須確保沒有其他視圖依賴於它。對?你認爲stackView會是一個很好的解決方案嗎?因爲即使你刪除了一個元素,stackview也可以自行調整。 –

相關問題