【问题标题】:Icon with padding and rounded corners - iOS Custom Renderer for Xamarin Forms带有填充和圆角的图标 - 适用于 Xamarin 表单的 iOS 自定义渲染器
【发布时间】:2018-11-24 15:59:54
【问题描述】:

我正在尝试创建一个带有圆角的图像,并在图像周围设置 5pts 的填充。我已经让角落工作了,但是图像,一个图标,占据了整个控件。我尝试过的一些事情是:

    public override void LayoutSubviews()
    {
        try
        {
            var element = (IconTile)Element;
            var textheight = element.HeightRequest / 3;

            Control.Layer.CornerRadius = 10;
            Control.Layer.BackgroundColor = HelperUtilities.GetColor(element.Item.BackgroundColor, Color.Transparent).ToCGColor();
            Control.ClipsToBounds = true;

            //Control.Image.Scale(new CGSize(element.WidthRequest - 10, element.HeightRequest - 10));
            Control.Image = Control.Image.ImageWithAlignmentRectInsets(new UIEdgeInsets(5, 5, 5, 5));
            Control.Frame = new CGRect(5, 5, element.Width - 10, element.Height - 10);
            Control.LayoutMargins = new UIEdgeInsets(5,5,5,5);
            Control.Image.DrawAsPatternInRect(new CGRect(5, 5, element.Width - 10, element.Height - 10));
            //UIGraphics.BeginImageContextWithOptions(new CGSize(element.WidthRequest - 40, element.HeightRequest - 40), false, 0f);
            base.LayoutSubviews();

在 Android 中,我可以使用

            child.SetPadding(20,20,20,20);
            var result = base.DrawChild(canvas, child, drawingTime);

如何在 iOS 中执行此操作?

看起来在 iOS 中我应该可以通过在控件上设置 Frame 来做到这一点,如下所示:

            CGSize size = Control.Image.Size;
            CGRect rect = new CGRect(0, 0, size.Width - 5, size.Height - 5);
            Control.Frame = rect;

取自https://stackoverflow.com/a/6435536/1181230。但是图像大小现在已调整为框架。是 这是表单中的错误?

【问题讨论】:

    标签: ios xamarin.forms custom-renderer


    【解决方案1】:

    我最终覆盖了 TrySetImage 并调用了我自己的 SetImage,它创建了一个带有框架的新图像视图 .. 我换了:

                var imageView = Control;
                if (imageView != null)
                    imageView.Image = uiimage;
    

    与:

                var imageOnly = ((IconTile) Element).ImageOnly;
                _imageView = new UIImageView(imageOnly ? new CGRect(7, 7, Element.WidthRequest - 14, Element.HeightRequest - 14)
                    : new CGRect(10, 10, Element.WidthRequest - 20, Element.HeightRequest - 20))
                {
                    Image = uiimage,
                    ClipsToBounds = true,
                };
                Control.InsertSubview(_imageView, 0);
    

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 2018-03-15
      • 1970-01-01
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多