簡體   English   中英

帶填充和圓角的圖標-適用於Xamarin Forms的iOS自定義渲染器

[英]Icon with padding and rounded corners - iOS Custom Renderer for Xamarin Forms

我正在嘗試創建一個帶有圓角的圖像,並在圖像周圍填充約5pt的填充。 我已經做好了工作,但是圖像(一個圖標)占據了整個控件。 我嘗試過的一些事情是:

    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 但是圖像大小現在已根據幀進行了調整。 這是Forms中的錯誤嗎?

我最終重寫了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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM