Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择器渲染器高度/位置调整?_C#_Ios_Xamarin.forms_Uipickerview - Fatal编程技术网

C# 选择器渲染器高度/位置调整?

C# 选择器渲染器高度/位置调整?,c#,ios,xamarin.forms,uipickerview,C#,Ios,Xamarin.forms,Uipickerview,我是Xamrin的新手。表单编程。我想自定义“Picker”视图控件。上图中有: -带有文本“选择”的按钮(单击时调用picker.Focus()), -选择按钮后面有黑色背景和文本颜色的选择器, -空列表视图, -当选择器处于“聚焦”状态时,将弹出选择器选项控制盘窗格 如何将A窗格移动到空白ListVIEW中,或者,B)延长轮盘窗格的高度(以覆盖更多的屏幕)?通过PS的示例: 选择器渲染器实现代码,与现在一样(由@Land提供): [程序集:ExportRenderer(typeof(MyP

我是Xamrin的新手。表单编程。我想自定义“Picker”视图控件。上图中有:

-带有文本“选择”的按钮(单击时调用picker.Focus()),
-选择按钮后面有黑色背景和文本颜色的选择器,
-空列表视图,
-当选择器处于“聚焦”状态时,将弹出选择器选项控制盘窗格

如何将A窗格移动到空白ListVIEW中,或者,B)延长轮盘窗格的高度(以覆盖更多的屏幕)?通过PS的示例:

选择器渲染器实现代码,与现在一样(由@Land提供):

[程序集:ExportRenderer(typeof(MyPicker)、typeof(MyPickerRenderer))]
名称空间AppName.iOS
{
公共类MyPickerRenderer:PickerRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
UITextField textField=控件;
UIPickerView-pickerView=textField.InputView作为UIPickerView;
选择器myPicker=元素;
清单项目清单;
itemList=myPicker.Items.ToList();
Delegate=newmypickerviewdelegate(itemList);
}
}
公共类MyPickerViewDelegate:UIPickerViewDelegate
{
清单项目清单;
公共MyPickerViewDelegate(列表)
{
itemList=列表;
}
//定义字体大小或样式
公共覆盖NSAttributeString GetAttributeTitle(UIPickerView pickerView、第九行、第九组件)
{
var text=新的NSAttribute字符串(
itemList[(int)行],
字体:UIFont.SystemFontOfSize(12),
前底色:UIColor。黑色,
冲程宽度:1
);
返回文本;
}
//定义行高度
公共覆盖nfloat GetRowHeight(UIPickerView pickerView,NIN组件)
{
返回20;
}
//使用以下方法自定义更灵活(包括放置):
公共覆盖UIView GetView(UIPickerView-pickerView、nint行、nint组件、UIView视图)
{
UIView contentView=新UIView(新CGRect(
0,0,UIScreen.MainScreen.Bounds.Size.Width,UIScreen.MainScreen.Bounds.Size.Height);
UILabel label=新UILabel();
label.Frame=contentView.Bounds;
添加子视图(标签);
label.Text=itemList[(int)行];
//更改标签样式
label.Font=UIFont.SystemFontOfSize(12);
label.TextColor=UIColor.Black;
label.TextAlignment=UIKit.UITextAlignment.Center;
返回contentView;
}
}
}
< P>)将车轮窗格移动到空白ListVIEW

通过设计,UITextField的inputView将从底部飞入视图。如果您确实想将其放在ListView中。您可以尝试创建新控件而不是选择器

b) 延长车轮窗格的高度(以覆盖更多的车轮) 屏幕)

是的,我们可以通过将inputView的框架设置为:

UIPickerView pickerView = textField.InputView as UIPickerView;
textField.InputView.Frame = new CGRect(0, 0, 320, 320);
但当我们这样做时,它将与inputAccessoryView重叠(带有用于选择项目的“完成”按钮)。因此,我们也需要自定义此视图:

UIView accessoryView = new UIView(new CGRect(100, 100, 320, 144));
UIButton btn = new UIButton(UIButtonType.System);
btn.SetTitle("Done", UIControlState.Normal);
btn.AddTarget((sender, args) =>
{
    textField.Text = itemList[(int)(pickerView.SelectedRowInComponent(0))];
    textField.ResignFirstResponder();
}, UIControlEvent.TouchUpInside);
accessoryView.AddSubview(btn);
//Place the button at super view's top, right position.
btn.TranslatesAutoresizingMaskIntoConstraints = false;
accessoryView.AddConstraint(NSLayoutConstraint.Create(btn, NSLayoutAttribute.Trailing, NSLayoutRelation.Equal, accessoryView, NSLayoutAttribute.Trailing, 1, -10));
accessoryView.AddConstraint(NSLayoutConstraint.Create(btn, NSLayoutAttribute.Top, NSLayoutRelation.Equal, accessoryView, NSLayoutAttribute.Top, 1, 5));

textField.InputAccessoryView = accessoryView;

调整
CGRect()
的最后一个参数,以满足延长车轮窗格高度的要求(在我的测试中,InputView的默认高度约为220,InputAccessoryView的默认高度约为44。相应地调整它们)。

@jth因为我们覆盖了选择器,所以应该重置事件。我只是给出一个UI示例,实际上我们应该做很多事情来达到我们的效果。我给你做了一个样品,你可以参考。谢谢你的样品。SelectedIndex现在正在正确更改。但是,我仍然不知道如何将“完成”按钮覆盖在拾取轮窗格的顶部(默认情况下)。使用选择器渲染器,我们将“完成”按钮移动到选择器控制盘上方,而不是叠加在控制盘窗格上的“完成”按钮。如果这就是默认情况下选择器的显示方式,那么这一定是可能的是吗?@jtth我知道这可能不是一个完美的解决方案,但inputView是由Apple定义的,我们无法更改其功能。我们总是使用它的默认高度。我也了解官方渲染器使用工具栏,而且我们总是使用它。但它不能达到你的效果,我把它改成视图,你可以修改它的高度和背景色。它也能很好地工作。
accessoryView.BackgroundColor=UIColor.FromRGB(207212 218)
UIView accessoryView = new UIView(new CGRect(100, 100, 320, 144));
UIButton btn = new UIButton(UIButtonType.System);
btn.SetTitle("Done", UIControlState.Normal);
btn.AddTarget((sender, args) =>
{
    textField.Text = itemList[(int)(pickerView.SelectedRowInComponent(0))];
    textField.ResignFirstResponder();
}, UIControlEvent.TouchUpInside);
accessoryView.AddSubview(btn);
//Place the button at super view's top, right position.
btn.TranslatesAutoresizingMaskIntoConstraints = false;
accessoryView.AddConstraint(NSLayoutConstraint.Create(btn, NSLayoutAttribute.Trailing, NSLayoutRelation.Equal, accessoryView, NSLayoutAttribute.Trailing, 1, -10));
accessoryView.AddConstraint(NSLayoutConstraint.Create(btn, NSLayoutAttribute.Top, NSLayoutRelation.Equal, accessoryView, NSLayoutAttribute.Top, 1, 5));

textField.InputAccessoryView = accessoryView;