Tengo este código en un renderizador de iOS:

    private class CustomFooterTableViewModelRenderer : TableViewModelRenderer
    {
        public CustomFooterTableViewModelRenderer(TableView model) : base(model)
        {
        }

        public override UIView GetViewForFooter(UITableView tableView, nint section)
        {
                var lbl = new PaddedLabel()
                {

                    // Text = TitleForFooter(tableView, section), // or use some other text here
                    Text = "Select or deselect cards from the list above and they will added or removed from the card deck",
                    TextAlignment = UITextAlignment.Justified,
                    LineBreakMode = UILineBreakMode.WordWrap
                };
                return lbl;
        }

        public sealed class PaddedLabel : UILabel
        {
            private UIEdgeInsets EdgeInsets { get; set; } = new UIEdgeInsets(top: 10, left: 15, bottom: 0, right: 0);

            public override void DrawText(CoreGraphics.CGRect rect)
            {
                var newRect = new CoreGraphics.CGRect(0, 0, rect.Width + 10, rect.Height);
                base.DrawText(EdgeInsets.InsetRect(newRect));
            }
        }

    }

El código funciona, pero mi etiqueta no se ajusta y supongo que no cambia de tamaño también. Tenga en cuenta que intenté agregar WordWrap pero eso no parece funcionar. Alguien tiene alguna idea sobre cómo puedo solucionar esto y también hacer que se redimensione.

0
Samantha J T Star 14 nov. 2017 a las 13:33

2 respuestas

La mejor respuesta

En lugar de UILabel, intente usar 'UITextView`; es más fácil integrar el ajuste de palabras con relleno / inserciones.

private class CustomFooterTableViewModelRenderer : TableViewModelRenderer
{
    public CustomFooterTableViewModelRenderer(TableView model) : base(model)
    {
    }

    public override UIView GetViewForFooter(UITableView tableView, nint section)
    {
        var txtView = new UITextView
        {
            Editable = false,
            Text = "Select or deselect cards from the list above and they will added or removed from the card deck,",
            TextAlignment = UITextAlignment.Justified,
            TextContainerInset = new UIEdgeInsets(top: 10, left: 15, bottom: 5, right: 5),
            BackgroundColor = Color.Transparent.ToUIColor()
        };

        txtView.TextContainer.LineBreakMode = UILineBreakMode.WordWrap;
        return txtView;
    }
}

enter image description here

2
Sharada Gururaj 19 nov. 2017 a las 22:38

no envuelve

Es porque olvidó configurar Lines 0.

no cambia de tamaño

Creo que es porque aumentas el ancho al dibujar.

Código final:

public override UIView GetViewForFooter(UITableView tableView, nint section)
{
    var lbl = new PaddedLabel()
    {
         Lines = 0,
        // Text = TitleForFooter(tableView, section), // or use some other text here
        Text = "Select or deselect cards from the list above and they will added or removed from the card deck",
        TextAlignment = UITextAlignment.Justified,
        LineBreakMode = UILineBreakMode.WordWrap
    };
    return lbl;
}

    public sealed class PaddedLabel : UILabel
    {
        private UIEdgeInsets EdgeInsets { get; set; } = new UIEdgeInsets(top: 10, left: 15, bottom: 0, right: 0);

        public override void DrawText(CoreGraphics.CGRect rect)
        {
            var newRect = new CoreGraphics.CGRect(0, 0, rect.Width , rect.Height);
            base.DrawText(EdgeInsets.InsetRect(newRect));
        }
    }

enter image description here

enter image description here

1
Cole Xia - MSFT 15 nov. 2017 a las 07:11