MvvmCross iOS UILabel AttributedText с языковым конвертером - PullRequest
0 голосов
/ 21 октября 2018

Я создаю пользовательский элемент управления для UILabel с пользовательским параметром Kern.

 [Register("CustomLabelView"), DesignTimeVisible(true)]
    public class CustomLabelView : UILabel
    {
        private float _textLetterSpacing;

        public CustomLabelView(IntPtr handle) : base(handle)
        {
        }

        [Export("TextLetterSpacing"), Browsable(true)]
        public float TextLetterSpacing
        {
            get => _textLetterSpacing;
            set
            {
                _textLetterSpacing = value;
                SetNeedsDisplay();
            }
        }

        public CustomLabelView()
        {
            Initialize();
        }

        public override void AwakeFromNib()
        {
            // Called when loaded from xib or storyboard.
            Initialize();
        }

        void Initialize()
        {
            NSRange range = new NSRange(0, Text.Length);
            var attributes = AttributedText.GetCoreTextAttributes(0, out range);
            var attributedTitle = new NSAttributedString(Text, new CTStringAttributes() { KerningAdjustment = TextLetterSpacing, ForegroundColor = TextColor.CGColor, UnderlineStyle = attributes.UnderlineStyle });
            AttributedText = attributedTitle;
            SetNeedsDisplay();
        }
    }

Я привязываю текст к этому элементу управления с помощью language converter

set.Bind(CustomLabelView)
   .For(c => c.Text)
   .To(vm => vm.TextSource)
   .WithConversion("Language", "AgreementText");

и underline свойства hasn 'т подать заявку на связанный текст.Также я попробовал AttributedText свойство вместо Text.Никаких изменений.

My LinkerPleaseInclude файл содержит эти строки

public void Include(UILabel label)
{
  label.Text = label.Text + "";
  label.AttributedText = new NSAttributedString(label.AttributedText.ToString() + "");            
}

Есть идеи, как это отсортировать?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Я просто поместил Initialize метод в Draw для моей CustomLabel.

Вот решение:

 public override void Draw(CGRect rect)
 {
     Initialize();
     base.Draw(rect);
 }

 private void Initialize()
 {
     var attributes = AttributedText.GetCoreTextAttributes(0, out _);
     AttributedText = new NSMutableAttributedString(Text,
                new CTStringAttributes
                {
                    KerningAdjustment = TextLetterSpacing, Font = attributes.Font,
                    UnderlineStyle = attributes.UnderlineStyle
                });
 }
0 голосов
/ 24 октября 2018

Я изменил значение свойства UnderlineStyle на одно из перечисления CTUnderlineStyle, и оно работает для меня.

namespace CoreText
    {
        //
        // Summary:
        //     Specifies the style of an underline ornament.
        //
        // Remarks:
        //     To be added.
        public enum CTUnderlineStyle
        {
            None = 0,
            Single = 1,
            Thick = 2,
            Double = 9
        }
    }

Вот мой код:

 void Initialize()
        {
            this.Text = "This is some formatted text";
            NSRange range = new NSRange(0, Text.Length);
            var attributes = AttributedText.GetCoreTextAttributes(0, out range);
            var attributedTitle = new NSAttributedString(Text, new CTStringAttributes() { KerningAdjustment = TextLetterSpacing, ForegroundColor = TextColor.CGColor, UnderlineStyle = CTUnderlineStyle.Single });
            AttributedText = attributedTitle;
            SetNeedsDisplay();
        }

Подчеркивание появляетсяэто ты хочешь?

...