带有MonoTouch.Dialog的UIPopoverController会导致意外调整popover的大小

时间:2012-02-07 17:11:21

标签: xamarin.ios uipopovercontroller monotouch.dialog

我在UIPopoverController中使用MonoTouch.Dialog为我们的iPad用户提供了一系列可以使用的设置。在我的应用程序中,我使用的是CalendarView(http://escoz.com/blog/monotouch-calendar-control-is-here/),因此用户可以设置应用程序的日期(这些设置用于配置定时位置)谷歌地图)。

无论如何,我遇到了一些关于UIPopoverController的大小问题......无论我如何设置内容大小,一旦我更深入地点击.Dialog树,UIPopoverController会自行调整大小,这会导致所谓的日历视图上出现不需要的大小调整

附上我所看到的样本。您会注意到,我的内容大小为450x420。单击任何选项后,弹出窗口会自行调整大小。我希望这个popover始终保持相同的大小。

我错过了一些明显的东西吗?任何帮助将不胜感激。

从myPopOverView.cs声明并启动popover:

UIPopoverController myPopOver = new UIPopoverController(new myPopOverView()); 

btnSearch.TouchUpInside += (sender, e) => {
   myPopOver.PopoverContentSize = new SizeF(450f, 420f);
   myPopOver.PresentFromRect (btnPopOver.Frame, this.View, UIPopoverArrowDirection.Down, true);
}   

来自myPopOverView.cs:

public override void ViewDidLoad ()
   {
  base.ViewDidLoad ();

  var root = CreateRoot ();

  var dv = new DialogViewController (root, true);
  this.PushViewController (dv, true);
}

RootElement CreateRoot ()
    {

        return new RootElement ("Find Stuff") {
                new Section (){
                    new RootElement ("States", new RadioGroup (0)){
                        new Section (){
                            new RadioElement ("New York"),
                            new RadioElement ("California"),
                            new RadioElement ("Texas"), 
                        }
                    }  , 
                }  ,
                new Section (){
                    new RootElement ("Places", new RadioGroup (0)){
                        new Section (){
                            new RadioElement ("New York City"),
                            new RadioElement ("San Francisco"),
                            new RadioElement ("Dallas"), 
                        }
                    }  , 
                }  ,
                new Section (){
                    new RootElement ("Products") {
                            from sh in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
                                select new Section (sh + " - Section") {
                                   from filler in "12345" 
                                    select (Element) new CheckboxElement (sh + " - " + filler, true, "kb")
                            }

                    }  , 
                }  

        }  ;        
    }

1 个答案:

答案 0 :(得分:1)

每次TopViewController更改UIPopoverController都会尝试自动协商它的ContentSize。

您应该通过覆盖WillShowViewController方法并在那里设置SizeF来为每个呈现的UIViewController设置ContentSizeForViewInPopover。