본문 바로가기
Framework/MAUI

[MAUI] MaxLines 와 LineBreakMode 같이 안될 때

by Kor-IT 2023. 3. 3.
반응형

MAUI 공부하면서 'MaxLines' 속성과 'LineBreakMode'를 같이 사용 시 속성값이 같이 적용이 안되어 이를 해결한 방법을 공유하고자 한다.

 

이와 비슷한 경우가 Width값을 잘못 주어 영역 밖으로 나가버리는 경우가 있는데 해당 경우가 아닌 두 가지 속성을 주었는데 '...' 이 발생하지 않은 경우이다.

 

 

 

Label: MaxLines and LineBreakMode · dotnet/maui · Discussion #5492

I am trying to become more familiar with .net MAUI and the app I was writing I decided I wanted to have a label with at most 2 lines of text and then truncate at the end or TailTruncation. After ru...

github.com

 

이렇듯 나와 비슷한 경우를 가진 개발자가 github에 이슈를 올려 해결방법을 받은 링크를 공유한다.

 

 

방법


AllowMultiLineTruncation() 

private static void AllowMultiLineTruncation()
    {
        static void UpdateMaxLines(Microsoft.Maui.Handlers.LabelHandler handler, ILabel label)
        {
#if ANDROID
      var textView = handler.PlatformView;
      if(    label is Label controlsLabel
          && textView.Ellipsize == Android.Text.TextUtils.TruncateAt.End )
      {
        textView.SetMaxLines( controlsLabel.MaxLines );
      }
#elif IOS
            var textView = handler.PlatformView;
            if (label is Label controlsLabel
                && textView.LineBreakMode == UIKit.UILineBreakMode.TailTruncation)
            {
                textView.Lines = controlsLabel.MaxLines;
            }
#endif
        };

        Label.ControlsLabelMapper.AppendToMapping(
           nameof(Label.LineBreakMode), UpdateMaxLines);

        Label.ControlsLabelMapper.AppendToMapping(
          nameof(Label.MaxLines), UpdateMaxLines);
    }

 

반응형

 

 

MauiProgram.cs

 public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
            });

        AllowMultiLineTruncation();

        return builder.Build();
    }

 

MauiProgram.cs 에서 앱 실행시 AllowMultiLineTruncation() 불러 호출하면 된다.

 

 

실행 결과

 

코드상에 'LineBreakMode' 는 'TailTruncation'이고 'MaxLine'는 '2' 값을 주었을 경우 2줄까지 나오면 끝에 잘리는 부분은 '...'로 대신해서 나온다. 만약, 이전같았으면 한 줄에 끝 부분만 '...' 나왔을 것이다.

 

아직 MAUI에 자잘한 오류가 있다. 해당 경우에 도움이 되길 바란다.

 

반응형

댓글