2013-03-13 61 views
2

我最近開始開發一個帶有單點觸摸的iOS應用程序。我的問題是關於佈局過程。目前我的所有超級視角都決定了子視圖的空間大小。如何從superview/superviewcontroller請求更多的空間iOS

override void LayoutSubviews() 
{ 
    this.subview1.Frame = new RectangleF(new PointF(0,0), new SizeF(10, 10)); 
    this.subview2.Frame = new RectangleF(new PointF(0, 15), new SizeF(10, 10)); 
} 

但現在我試圖顯示一個UITableView哪個高度取決於內容。那麼告訴Superview我需要一個特定高度的正確方法是什麼?

我在彈出菜單中遇到了同樣的問題,顯示UITableView。 UIPopoverController接受另一個UIViewController並將其顯示在Popover中。什麼是告訴UIPopoverController我需要一個特定大小的撥款方式?

+0

您可以通過調用[ superview]來訪問視圖的超級視圖。您可以根據超級視圖的大小設置您的尺寸。 – Petar 2013-03-13 11:13:12

+0

所以我需要子視圖UITableView並重寫佈局子視圖方法,並根據我的超視圖改變了我的大小。這是從蘋果推薦的方式來請求尺寸?我的超級視圖包含更多的子視圖,所以我的超級視圖應該決定子視圖應該獲得大小還是保持其實際大小。我只想對我的超級觀點說嘿,如果你想顯示我所有我的內容我需要的大小... – 2013-03-13 11:26:26

+0

這不是一個好方法。你能不能根據其內容設置視圖的大小,然後將它添加到超級視圖中? – Petar 2013-03-13 11:50:38

回答

0

感謝所有響應計算高度雖然沒有徹底解決我的問題。但現在我認爲我得到了一個解決方案。

iOS本身不支持自下而上的佈局過程。因此層次結構頂部的元素應該觸發佈局過程並詢問其子視圖的大小。所以如果新數據來自您的業務模型,ViewController首先必須處理它,然後將其推送到呈現數據的tableView。之後,他觸發佈局過程並詢問tableView爲了呈現所有數據而不滾動(只需通過ContentSize屬性即可獲得所需的大小)。

我也不知道的是,有一個特殊的屬性爲視圖控制器所需的大小將其呈現在Popover ContentSizeForViewInPopover。 iOS中集成了一種機制,您可以聽取對物業所做的更改。 PopoverController監聽對此屬性所做的更改,並自動調整大小以適應此大小。因此,您在ContentViewController中必須執行的操作是設置ContentSizeForViewInPopover屬性的值,並自動調整PopoverController的大小。

0

這應該不是太困難:

  • 傳遞父視圖/酥料餅的情況下進入你的UITableViewSource,這可能是通過其構造函數,公共屬性或字段等
  • 當您需要修改表源中的父控件的大小形式,你應該有機會獲得其FrameContentSize物業這樣做

這是否解決了問題?

0

在UITableView的情況下,您應該重寫UITableViewSource的GetHeightForRow方法。 此方法在渲染前返回其每個單元格並返回其高度。

所以,你可以根據細胞墊層數據源或細胞直接觀看(您可以通過NSpath酒店需要從表是指它)