我想用底部的動畫呈現一個自定義大小的模式視圖控制器。我可以用ModalPresentationStyle
到FormSheet
來實現這個動畫,但是it forces me to use the default size which is 540x620和我的觀點不合適。如何在中心顯示自定義尺寸的模態視圖控制器?
我該如何執行到放置在屏幕中心的任意大小視圖(控制器)的類似轉換?
我想用底部的動畫呈現一個自定義大小的模式視圖控制器。我可以用ModalPresentationStyle
到FormSheet
來實現這個動畫,但是it forces me to use the default size which is 540x620和我的觀點不合適。如何在中心顯示自定義尺寸的模態視圖控制器?
我該如何執行到放置在屏幕中心的任意大小視圖(控制器)的類似轉換?
我沒有找到一種方法,從模態控制器本身,所以我創建了一個類和擴展方法做到這一點:
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
);
}
就是這樣。
一個簡單的方法是下列
當前模態視圖控制器作爲形式表並在模態視圖控制器添加:
public override void ViewWillLayoutSubviews()
{
base.ViewWillLayoutSubviews();
this.View.Superview.Bounds = new RectangleF (0, 0, 900, 700);
}
設置,如果你所需的寬度和高度是很重要的不希望ios分配默認的表單大小
更新:在ios 8中至少有一些情況,當上述解決方案觸發一個無限循環。看起來在某些情況下(例如在模態視圖中嵌入webview並在某些html輸入文本中點擊時),更改超視圖邊界會在模態視圖上觸發佈局,導致無限循環並凍結應用程序。但在ios 8中,您可以簡單地設置PrefferedSize屬性以實現相同的效果。
安靜的輝煌... –
這看起來沒有像我見過的任何iOS代碼。 你可以請更詳細地顯示/實際的例子嗎? – iOSProgrammingIsFun
@iOSProgrammingIsFun這個問題有MonoTouch標記(現在標記爲[Xamarin.iOS](http://xamarin.com/ios))。這是一個用C#寫入Apple平臺的平臺。 –