2012-12-27 67 views

回答

4

我沒有找到一種方法,從模態控制器本身,所以我創建了一個類和擴展方法做到這一點:

public class ModalViewController : UIViewController 
{ 
    public SizeF OriginalViewSize { get; private set; } 

    void Initialize() 
    { 
     ModalPresentationStyle = UIModalPresentationStyle.FormSheet; 
    } 

    public override void ViewDidLoad() 
    { 
     OriginalViewSize = View.Bounds.Size; 
     base.ViewDidLoad(); 
    } 

    public ModalViewController (IntPtr handle) : base (handle) 
    { 
     Initialize(); 
    } 

    public ModalViewController (string nibName, NSBundle bundle) : base (nibName, bundle) 
    { 
     Initialize(); 
    } 

    public ModalViewController() : base() 
    { 
     Initialize(); 
    } 
} 

public static class ModalViewControllerExtensions 
{ 
    public static void PresentModalViewController (this UIViewController parent, ModalViewController target) 
    { 
     parent.PresentViewController (target, true, null); 

     target.View.Superview.AutoresizingMask = UIViewAutoresizing.FlexibleMargins; 
     target.View.Superview.Frame = new RectangleF (PointF.Empty, target.OriginalViewSize); 
     target.View.Superview.Center = UIScreen.MainScreen.Bounds.Center().Rotate(); 
    } 
} 

這大約是我如何使用它:

this.PresentModalViewController (
    new PublishModalViewController (Item, HandlePublishAction) 
); 

我不需要明確指定大小,因爲它使用來自界面構建器的根視圖邊界,這很方便。我不確定這是如何反應自動旋轉,它可能需要一些調整。我也在這裏使用兩種擴展方法:

public static PointF Rotate (this PointF pt) 
{ 
    return new PointF (pt.Y, pt.X); 
} 

public static PointF Center (this RectangleF rect) 
{ 
    return new PointF (
     (rect.Right - rect.Left)/2.0f, 
     (rect.Bottom - rect.Top)/2.0f 
     ); 
} 

就是這樣。

+0

安靜的輝煌... –

+0

這看起來沒有像我見過的任何iOS代碼。 你可以請更詳細地顯示/實際的例子嗎? – iOSProgrammingIsFun

+1

@iOSProgrammingIsFun這個問題有MonoTouch標記(現在標記爲[Xamarin.iOS](http://xamarin.com/ios))。這是一個用C#寫入Apple平臺的平臺。 –

3

一個簡單的方法是下列

當前模態視圖控制器作爲形式表並在模態視圖控制器添加:

public override void ViewWillLayoutSubviews() 
{ 
    base.ViewWillLayoutSubviews(); 
    this.View.Superview.Bounds = new RectangleF (0, 0, 900, 700); 
} 

設置,如果你所需的寬度和高度是很重要的不希望ios分配默認的表單大小

更新:在ios 8中至少有一些情況,當上述解決方案觸發一個無限循環。看起來在某些情況下(例如在模態視圖中嵌入webview並在某些html輸入文本中點擊時),更改超視圖邊界會在模態視圖上觸發佈局,導致無限循環並凍結應用程序。但在ios 8中,您可以簡單地設置PrefferedSize屬性以實現相同的效果。

相關問題