2017-08-16 25 views
3

我想添加一个选择器与背景图像,所以我使用了相对布局,并在相对布局中添加了图像和选取器。 我的问题是我在IOS的环境中有一个边框,我在android设备中有一个底线。 我在正常输入中遇到了这个问题并解决了问题,但我在拾取器不起作用的情况下使用了相同的场景。如何删除IOS中的选择器边框

这里是代码

<RelativeLayout Margin="0,0,0,0" 
            Padding="0,0,0,0" 
            > 
         <Image Source="input_mobile_code_brown.png" 
           x:Name="img" 

           RelativeLayout.XConstraint = 
        "{ConstraintExpression Type=RelativeToParent, 
         Property=Width, 
         Factor=0, 
         Constant=0}" 
       RelativeLayout.YConstraint = 
        "{ConstraintExpression Type=RelativeToParent, 
         Property=Height, 
         Factor=0, 
         Constant=0}" 
            RelativeLayout.WidthConstraint = 
        "{ConstraintExpression Type=RelativeToParent, 

         Property=Width, 
         Factor=1, 
         Constant=0}" 
       RelativeLayout.HeightConstraint = 
        "{ConstraintExpression Type=RelativeToParent, 

         Property=Height, 
         Factor=1, 
         Constant=0}" 
           /> 
         <Picker BackgroundColor="Transparent" 
           x:Name="picker" 
           Margin="10,0,0,0" 

       RelativeLayout.XConstraint = 
        "{ConstraintExpression Type=RelativeToParent, 
         Property=Width, 
         Factor=0, 
         Constant=0}" 
       RelativeLayout.YConstraint = 
        "{ConstraintExpression Type=RelativeToParent, 
         Property=Height, 
         Factor=0, 
         Constant=0}" 
       RelativeLayout.WidthConstraint = 
        "{ConstraintExpression Type=RelativeToView, 
         ElementName=img, 
         Property=Width, 
         Factor=1, 
         Constant=0}" 
       RelativeLayout.HeightConstraint = 
        "{ConstraintExpression Type=RelativeToView, 
         ElementName=img, 
         Property=Height, 
         Factor=1, 
         Constant=0}" 
      /> 
        </RelativeLayout> 
  • 这是结果

enter image description here

我需要从IOS

删除默认的边境

所以我做了customRenderer在IOS

protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) 
{ 
    base.OnElementChanged(e); 
    var view = e.NewElement as CustomPicker; 
    this.Control.BorderStyle= UITextBorderStyle.None; 
} 

但仍是边境IOS

回答

0

不会删除你只需要修改选择器CustomPicker在这样的XAML:

<local:CustomPicker BackgroundColor="Transparent" .../> 

然后,它会很好地工作。

+0

不工作的兄弟! –

+0

@SumitPathak,你有像@Victor Faltas一样的Picker自定义渲染器吗?请确保您完成了@Victor Faltas所描述的所有事情,只需将'Picker'更改为'local:CustomPicker'即可。 –

0

预期的答案是

<local:CustomPicker x:Name="modePicker" ... 

public class BorderlessPickerRenderer : PickerRenderer 
{ 
    public static void Init() { } 
    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) 
    { 
     base.OnElementChanged(e); 
     if (e.OldElement == null) 
     { 
      Control.Background = null; 

      var layoutParams = new MarginLayoutParams(Control.LayoutParameters); 
      layoutParams.SetMargins(0, 0, 0, 0); 
      LayoutParameters = layoutParams; 
      Control.LayoutParameters = layoutParams; 
      Control.SetPadding(0, 0, 0, 0); 
      SetPadding(0, 0, 0, 0); 
     } 
    } 
} 

以上渲染器是Android

为iOS -

protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     base.OnElementPropertyChanged(sender, e); 

     Control.Layer.BorderWidth = 0; 
     Control.BorderStyle = UITextBorderStyle.None; 
    } 

对于UWP -

protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) 
    { 
     base.OnElementChanged(e); 

     if (Control != null) 
     { 
      Control.BorderThickness = new Windows.UI.Xaml.Thickness(0); 
      Control.Margin = new Windows.UI.Xaml.Thickness(0); 
      Control.Padding = new Windows.UI.Xaml.Thickness(0); 
     } 
    } 
+0

但是,它已经在iOS问题bro中拥有正确的自定义渲染器!我无语... –