Приложение C# Xamarin Label Padding для iOS

Я знаю, что этот вопрос задавали много раз, но я пробовал различные решения и не нашел подходящего. У меня есть ярлык на моей раскадровке под названием «Сообщения». При нажатии кнопки в метке появляется другой текст. Мне нужно заполнить только эту метку.

Я просмотрел: Добавление пробела/отступа к UILabel, текстовое поле UILabel и Изменение размера UILabel для размещения вставок.

Также не уверен, где в моем ViewController.cs разместить код. Я поставил его под public partial class ViewController : UIViewController, но получаю ошибки.

Редактировать 2:

Хорошо, сначала я сделал UITextView, но не смог заставить работать вертикальное выравнивание, поэтому вернулся к метке. Вот что у меня есть:

public partial class ViewController : UIViewController
{

    public partial class PaddedUILabel : UILabel
    {
        private UIEdgeInsets EdgeInsets { get; set; }

        public PaddedUILabel()
        {
            EdgeInsets = new UIEdgeInsets(0, 10, 0, 10);
        }
        public override void DrawText(CoreGraphics.CGRect rect)
        {
            base.DrawText(EdgeInsets.InsetRect(rect));
        }
    }

public override void ViewDidLoad()
    {

        base.ViewDidLoad();

        Message.Layer.BorderWidth = 1;
        Message.BackgroundColor = UIColor.FromWhiteAlpha(1, 0.88f);
        PaddedUILabel _paddedUILabel = Message as PaddedUILabel;

Я все еще не получаю никакой прокладки.


person Zailyn Tamayo    schedule 24.07.2017    source источник
comment
Вы используете Xamarin iOS или Xamarin Forms?   -  person Ziyad Godil    schedule 24.07.2017
comment
Xamarin для iOS. Ответ ниже для использования UITextView работает, но теперь текст не выровнен по вертикали.   -  person Zailyn Tamayo    schedule 24.07.2017
comment
Используете ли вы SizeToFit в своем коде? если да, то удали его и попробуй   -  person Ziyad Godil    schedule 25.07.2017


Ответы (2)


Вы можете использовать UITextView и предоставлять вставки напрямую (как указано в этой ссылке), которую вы можете сделать либо в ViewDidLoad, либо ViewWillAppear, или вы можете подклассировать свой UILabel и переопределить метод DrawText.

Метод DrawText помогает манипулировать прямоугольником, в котором рисуется текст внутри метки. Я бы посоветовал вам заплатить с некоторыми значениями, чтобы начать работу с ним.

Что-то типа:

public partial class PaddedUILabel : UILabel
{
     //Override draw text here

}

Если вы используете Xamarin iOS Native, дайте своей метке (например, myLabel) пользовательский класс из раскадровки и получите метку как:

PaddedUILabel _paddedUILabel = this.myLabel as PaddedUILabel;

Мне жаль, что я дал бы вам весь код, но на данный момент у меня нет доступа к среде Mac. Позвольте мне знать, если вам нужно что-нибудь еще.

Для вертикального выравнивания в TextView перейдите по ссылке .

Ваше здоровье

person Singhal2    schedule 24.07.2017
comment
Я не уверен, как это сделать, поэтому я использовал другое предложение по использованию UITextView, которое работает, но теперь я не знаю, как выровнять текст по вертикали? - person Zailyn Tamayo; 25.07.2017
comment
Обновлен мой ответ - person Singhal2; 25.07.2017

Я пробовал много решений, как обсуждалось здесь, но фактический результат не соответствовал тому, что я хотел, поэтому я сделал это так:

 if (this.Padding != default(Thickness))
                {
                    Device.BeginInvokeOnMainThread(() =>
                      {

                          if (Parent is Grid)
                          {
                              var parentAsGrid = Parent as Grid;
                              var index = parentAsGrid.Children.IndexOf(this);
                              parentAsGrid.Children.Remove(this);
                              Grid marginGrid = new Grid() { BackgroundColor = this.BackgroundColor,  HorizontalOptions = this.HorizontalOptions, VerticalOptions = this.VerticalOptions };


                              var lbl = new Label() { Text = this.Text, TextColor = this.TextColor, BackgroundColor = this.BackgroundColor, HorizontalOptions = this.HorizontalOptions, VerticalOptions = this.VerticalOptions, FontSize = this.FontSize };
                              lbl.Margin = this.Padding;
                              if (!parentAsGrid.Children.Contains(this))
                              {
                                  marginGrid.Children.Add(lbl);
                                  parentAsGrid.Children.Insert(index, marginGrid);
                              }

                          }
                          if (Parent is StackLayout)
                          {
                              var parentAsGrid = Parent as StackLayout;
                              var index = parentAsGrid.Children.IndexOf(this);
                              parentAsGrid.Children.Remove(this);
                              Grid marginGrid = new Grid() { BackgroundColor = this.BackgroundColor,   HorizontalOptions = this.HorizontalOptions, VerticalOptions = this.VerticalOptions };


                              var lbl = new Label() { Text = this.Text, TextColor = this.TextColor, BackgroundColor = this.BackgroundColor, HorizontalOptions = this.HorizontalOptions, VerticalOptions = this.VerticalOptions, FontSize = this.FontSize };
                              lbl.Margin = this.Padding;
                              if (!parentAsGrid.Children.Contains(this))
                              {
                                  marginGrid.Children.Add(lbl);
                                  parentAsGrid.Children.Insert(index, marginGrid);
                              }

                          }



                      });
person Abdullah Tahan    schedule 15.10.2017