2014-01-07 125 views
0

我想知道哪個是更好的方法來實現一個視圖,它被設計爲具有複雜的子視圖層次結構,比如左側有一個子視圖,右側有一個子視圖,左側子視圖有X個子子視圖在一列中,右側子視圖在一行中具有Y個子子視圖。 (X和Y變化)UIView自動佈局:子視圖的層次結構VS最小視圖層次結構?

兩種方式實現:

  1. 自左,右視圖(即UIView子類),自左子子視圖,自右子子視圖,根視圖只處理自定義左側和右側視圖,並且它們配置它們的子子視圖
  2. 只有一個視圖具有一列視圖(即左視圖的子子視圖)在左側和一行視圖(即右視圖的子子視圖)右邊

第一種方法: 優點:

  1. 清潔層次意味着更好的可維護性。
  2. 職責分佈在子視圖,使併發症少在每個視圖

缺點:

  1. 嵌套子視圖層次
  2. 可能有因自動佈局
  3. 委託鏈性能越差比較困難,將每個子視圖視爲需要執行某些操作的按鈕,自定義視圖需要將該操作一直委託給r OOT視圖

第二種方法: 優點:

  1. 少的子視圖
  2. 有更好的表現
  3. 容易委託鏈相比,1號方式

缺點:

  1. 難以維護/修改,因爲所有的子視圖都在一個水平上,特別是自動佈局
  2. 凌亂的代碼基礎,因爲所有的意見都在一個基本視圖

貌似第一個方法更好,但它仍然有幾個缺點,是否有一種全新的方式來實施它,以應對所有的缺點?

回答

1

這兩個子視圖(左列和右列)必須有一些共同點,否則您不會同時顯示它們。因爲他們有一個普遍的關係,所以我不會有選擇2的問題。有了這個說法,我仍然更喜歡選項1,原因如下:

  • 乾淨的層次結構更易於理解和維護。
  • 查看邏輯分佈更容易理解,並將保持您的類更小(這也意味着它將更容易重用其他地方的子視圖)。
  • 5月有更糟糕的表現」是一個大MAYBE。您應該使用儀器或使用NSDatetimeIntervalSinceNow進行實際測量。只要約束始終安裝在nearest common ancestor上,您應該沒問題。
  • 代表團和目標/行動不會那麼糟糕self.firstView.subView.button.target = self

在所有支持的硬件上的可接受性能應該是主要決定因素。可維護性應該緊隨其後。

用第一種方法。