当用户点击UITextField时,我正在尝试显示UIDatePicker。 在iPad上我已经使用了这段代码并且效果很好但是在iPhone上UIDatePicker被削减了。 这是我的代码
UIBarButtonItem btnCancel;
UIBarButtonItem btnFlexibleSpace;
UIBarButtonItem btnDone;
UIBarButtonItem[] btnItems;
btnCancel = new UIBarButtonItem(UIBarButtonSystemItem.Cancel, KBToolbarButtonDoneHandler);
btnFlexibleSpace = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace, null);
btnDone = new UIBarButtonItem(UIBarButtonSystemItem.Done, pickerDoneHandler);
btnItems = new UIBarButtonItem[] { btnCancel, btnFlexibleSpace, btnDone };
myToolbar.SetItems(btnItems, true);
UIDatePicker dpPurchaseDate;
dpPurchaseDate = new UIDatePicker(new RectangleF(0,44,this.View.Bounds.Width,216));
dpPurchaseDate.Mode = UIDatePickerMode.Date;
dpPurchaseDate.MaximumDate = NSDate.Now;
dpPurchaseDate.TimeZone = NSTimeZone.LocalTimeZone;
dpPurchaseDate.UserInteractionEnabled = true;
dpPurchaseDate.BackgroundColor = UIColor.White;
UIView pDateView;
pDateView = new UIView (new RectangleF (0, 0, this.View.Bounds.Width, 260));
pDateView.AddSubview (myToolbar);
pDateView.AddSubview (dpPurchaseDate);
evaluationDate.InputView = pDateView;
在iPad上它看起来像这样。
在iPhone中它看起来像这样
关于为什么会发生这种情况的任何想法?
答案 0 :(得分:1)
尝试添加此选项以强制调整选择器视图的大小
for (UIView * subview in dpPurchaseDate.subviews) {
subview.frame = dpPurchaseDate.bounds;
}
如果这不起作用,请将this.View.Bounds.Width
分配给浮点数并查看值是什么。也许由于某种原因它被设置为景观宽度。
答案 1 :(得分:1)
您创建UIDatePicker
而不设置任何调整大小的蒙版或自动布局约束以自动调整其帧,因此默认情况下,无论其超级视图如何,它都会保持其大小。
处理自动调整的最简单方法是设置UIView
' autoresizingMask
:
dpPurchaseDate.autoresizingMask = (UIViewAutoresizingFlexibleWidth | // Grow horizontally
UIViewAutoresizingFlexibleTopMargin); // Keep at the bottom of the superview
您可以尝试使用Interface Builder进行大小调整。
答案 2 :(得分:0)
有两种解决方案可以达到目标。
为iphone和ipad创建两个.xib文件,然后根据iphone屏幕在框架中添加需要对象并映射它们。
以编程方式管理pickerview框架以及要在iphone和ipad中显示的其他对象
答案 3 :(得分:-1)
UIDatePicker的高度为162.如果更改以下内容,则视图的大小将适当调整以适应。
UIDatePicker dpPurchaseDate;
dpPurchaseDate = new UIDatePicker(new RectangleF(0,44,this.View.Bounds.Width,162));
另外,改变其超级视图:
UIView pDateView;
pDateView = new UIView (new RectangleF (0, 0, this.View.Bounds.Width, 162));