PM-3349 PM-3350 Workaround to fix issues with text getting cropped/truncated when a Label has both Multiline and LinebreakMode set

This commit is contained in:
Dinis Vieira 2023-11-26 14:46:30 +00:00
parent 80c424ed03
commit 0a628cc8a8
No known key found for this signature in database
GPG key ID: 9389160FF6C295F3
5 changed files with 51 additions and 2 deletions

View file

@ -1,5 +1,6 @@
using Android.OS; using Android.OS;
using Bit.App.Controls; using Bit.App.Controls;
using Microsoft.Maui.Handlers;
namespace Bit.App.Handlers namespace Bit.App.Handlers
{ {
@ -26,6 +27,23 @@ namespace Bit.App.Handlers
{ {
handler.PlatformView.ContentDescription = label.AutomationId; handler.PlatformView.ContentDescription = label.AutomationId;
}); });
// WORKAROUND: There is an issue causing Multiline Labels that also have a LineBreakMode to not display text properly. (it truncates text on first line even with space available)
// MAUI Github Issue: https://github.com/dotnet/maui/issues/14125 and https://github.com/dotnet/maui/pull/14918
// When this gets fixed by MAUI these two Mapping below can be deleted, same for the UpdateMaxLines, TruncatedMultilineCustomLabel class and the equivalent Mappings on iOS
Microsoft.Maui.Handlers.LabelHandler.Mapper.AppendToMapping(nameof(Label.LineBreakMode), UpdateMaxLines);
Microsoft.Maui.Handlers.LabelHandler.Mapper.AppendToMapping(nameof(Label.MaxLines), UpdateMaxLines);
}
private static void UpdateMaxLines(ILabelHandler handler, ILabel label)
{
var textView = handler.PlatformView;
if(label is TruncatedMultilineCustomLabel controlsLabel
&& textView.Ellipsize == Android.Text.TextUtils.TruncateAt.End
&& controlsLabel.MaxLines != -1)
{
textView.SetMaxLines( controlsLabel.MaxLines );
}
} }
} }
} }

View file

@ -0,0 +1,12 @@
using Bit.App.Controls;
namespace Bit.App.Controls
{
// WORKAROUND: There is an issue causing Multiline Labels that also have a LineBreakMode to not display text properly. (it truncates text on first line even with space available)
// MAUI Github Issue: https://github.com/dotnet/maui/issues/14125 and https://github.com/dotnet/maui/pull/14918
// This class is used to be able to only add the workaround to this specific Label avoiding potential issues on other "normal" Label
// When this gets fixed by MAUI we can remove this class and some of the Mapping in LabelHandlerMappings
public class TruncatedMultilineCustomLabel : CustomLabel
{
}
}

View file

@ -61,7 +61,7 @@
<StackLayout <StackLayout
Padding="16,12" Padding="16,12"
Orientation="Horizontal"> Orientation="Horizontal">
<controls:CustomLabel <controls:TruncatedMultilineCustomLabel
Text="{Binding AppInfo}" Text="{Binding AppInfo}"
MaxLines="10" MaxLines="10"
StyleClass="box-footer-label" StyleClass="box-footer-label"

View file

@ -13,7 +13,7 @@
RowDefinitions="Auto,*" RowDefinitions="Auto,*"
ColumnDefinitions="*,Auto" ColumnDefinitions="*,Auto"
ColumnSpacing="10"> ColumnSpacing="10">
<controls:CustomLabel <controls:TruncatedMultilineCustomLabel
Grid.Row="0" Grid.Row="0"
Grid.Column="0" Grid.Column="0"
MaxLines="2" MaxLines="2"

View file

@ -1,4 +1,6 @@
using Bit.App.Controls; using Bit.App.Controls;
using Microsoft.Maui.Handlers;
using UIKit;
namespace Bit.iOS.Core.Handlers namespace Bit.iOS.Core.Handlers
{ {
@ -13,6 +15,23 @@ namespace Bit.iOS.Core.Handlers
handler.PlatformView.AccessibilityIdentifier = customLabel.AutomationId; handler.PlatformView.AccessibilityIdentifier = customLabel.AutomationId;
} }
}); });
// WORKAROUND: There is an issue causing Multiline Labels that also have a LineBreakMode to not display text properly. (it truncates text on first line even with space available)
// MAUI Github Issue: https://github.com/dotnet/maui/issues/14125 and https://github.com/dotnet/maui/pull/14918
// When this gets fixed by MAUI these two Mapping below can be deleted, same for the UpdateMaxLines, TruncatedMultilineCustomLabel class and the equivalent Mappings on Android
Microsoft.Maui.Handlers.LabelHandler.Mapper.AppendToMapping(nameof(Label.LineBreakMode), UpdateMaxLines);
Microsoft.Maui.Handlers.LabelHandler.Mapper.AppendToMapping(nameof(Label.MaxLines), UpdateMaxLines);
}
private static void UpdateMaxLines(ILabelHandler handler, ILabel label)
{
var textView = handler.PlatformView;
if(label is TruncatedMultilineCustomLabel controlsLabel
&& textView.LineBreakMode == UILineBreakMode.TailTruncation
&& controlsLabel.MaxLines != -1)
{
textView.Lines = controlsLabel.MaxLines;
}
} }
} }
} }