代码之家  ›  专栏  ›  技术社区  ›  Christine

带填充和圆角的图标-用于Xamarin窗体的iOS自定义呈现程序

  •  0
  • Christine  · 技术社区  · 7 年前

    我正在尝试创建一个圆角和屁股周围5磅填充的图像。我已经在角落里工作了,但是图像,一个图标,占据了整个控制权。我尝试过的一些事情是:

        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中,我应该可以这样设置控件的框架:

                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 .但现在图像大小已调整到帧。是 这是表单中的错误?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Christine    7 年前

    我最终覆盖了TrySetimage并调用了我自己的setImage,它创建了一个带有框架的新ImageView。 我替换了:

                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);