2016-11-23 2 views
0

Ich versuche, einen Etikettenumbruch innerhalb der Master-Seite einer MasterDetail-Seite zu machen. Ich dachte, es wäre das Standardverhalten, Etiketten zu umbrechen, aber nur für den Fall, dass ich sogar einen benutzerdefinierten Renderer gemacht habe. Ich habe bestätigt, dass der benutzerdefinierte Renderer funktioniert (durch Debugging und Hinzufügen eines Hintergrunds zu dem Label), also nehme ich an, dass es etwas Leichtes gibt, das ich vermisse. Kann jemand meinen Xaml ansehen und mir eine Idee geben, warum dieses Etikett nicht einwickelt?Warum wird mein Xamarin.Forms-Etikett nicht umbrochen?

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="MyApp.Pages.NavigationDrawer.NavigationMenuMasterPage" 
      xmlns:statics="clr-namespace:MyApp.Statics;assembly=MyApp" 
      xmlns:multi="clr-namespace:MyApp.Pages.NavigationDrawer;assembly=MyApp" 
      Title="Navigation drawer" 
      Icon="hamburger.png" 
      BackgroundColor="White"> 
    <ContentPage.Content> 
     <StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="Center" Margin="0, 25, 0, 0"> 
      <StackLayout Orientation="Horizontal" HorizontalOptions="Center"> 
       <Image x:Name="connectionStatusImage" /> 
       <Label x:Name="connectionStatusText" Margin="16, 0, 16, 0" YAlign="Center" FontSize="Medium"/> 
      </StackLayout> 
      <Label x:Name="changeConnectionStatusButton" TextColor="{x:Static statics:Palette.Orange}" XAlign="Center" FontAttributes="Bold" > 
       <Label.GestureRecognizers> 
        <TapGestureRecognizer Tapped="ChangeConnectionStatusClicked" NumberOfTapsRequired="1" /> 
       </Label.GestureRecognizers> 
      </Label> 
      <StackLayout x:Name="SyncStatusStack" Orientation="Horizontal" Margin="0, 16, 16, 0" VerticalOptions="Center" > 
       <multi:MultiLineLabel x:Name="syncStatusText" MinimumWidthRequest="0" Margin="16, 0, 0, 0" Text="I want to write a really long string to see if it wraps" /> 
       <Label x:Name="syncButton" MinimumWidthRequest="40" Text="SYNC" FontAttributes="Bold" YAlign="Center" HorizontalOptions="End" > 
        <Label.GestureRecognizers> 
         <TapGestureRecognizer x:Name="SyncGestureRecognizer" NumberOfTapsRequired="1" /> 
        </Label.GestureRecognizers> 
       </Label> 
      </StackLayout> 
      <StackLayout x:Name="SyncStack" Orientation="Vertical" HorizontalOptions="Center" Margin="0, 16, 0, 0"> 
       <ActivityIndicator x:Name="syncingIndicator" Margin="16, 0, 32, 0"/> 
       <Label x:Name="syncingText" /> 
      </StackLayout> 
      <ListView x:Name="menuListView" VerticalOptions="FillAndExpand" SeparatorVisibility="None" Margin="0, 16, 0, 0"> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <TextCell Text="{Binding Title}" TextColor="{x:Static statics:Palette.PrimaryText}" /> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
     </StackLayout> 
    </ContentPage.Content> 
</ContentPage> 

Und meine (höchstwahrscheinlich nicht notwendig) custom Label Renderer:

using MyApp.iOS.Renderers; 
using MyApp.Pages.NavigationDrawer; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.iOS; 

[assembly: ExportRenderer(typeof(MultiLineLabel), typeof(MultiLineLabeliOSRenderer))] 
namespace MyApp.iOS.Renderers 
{ 
    public class MultiLineLabeliOSRenderer : LabelRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Label> e) 
     { 
      base.OnElementChanged(e); 

      if (Control == null) return; 

      Control.LineBreakMode = UIKit.UILineBreakMode.WordWrap; 
      Control.Lines = 0;    
     } 
    } 
} 

screenshot of the issue

Antwort

0

Hmm nicht sicher, warum, aber Sie sind richtige Einstellung Linien auf 0 und mit Zeilenumbruch sollte das tun Trick (Multiple lines of text in UILabel)

Ich habe vor kurzem auch dies mit einem benutzerdefinierten Renderer (http://depblog.weblogs.us/2016/06/27/xamarin-forms-multi-line-label-custom-renderer-gotcha/) implementiert und eine Zahl ind verwendet Icate die genaue Anzahl von Zeilen, die ich gerne hätte. Das wird in der Eigenschaft Lines festgelegt und dann funktioniert das Wrapping.

+1

Ich habe einige Experimente mit dem Einfügen von Labels an verschiedenen Stellen und dem Einfügen von Labels in horizontale StackLayouts an verschiedenen Stellen durchgeführt (sogar auf einer neuen Seite mit einem einfachen ListView). Es scheint, dass Labels innerhalb eines horizontalen StackLayout nicht umbrochen werden iOS, wenn sich auf derselben Seite ein ListView befindet. Wenn es kein ListView gibt, funktioniert alles wie erwartet. Und alles funktioniert gut auf Android. Ich nehme an, das muss ein Fehler sein. Ich hatte das gleiche Verhalten mit einem Grid. Also habe ich einfach mein Layout geändert und das StackLayout vertikal gemacht. Nicht genau was ich wollte, aber es funktioniert :) –

+1

Beste Posting ein Repo auf BugZilla so wird es verfolgt werden! – Depechie

+0

@JasonToms hat Recht - ich habe gerade das ... was für eine Zeitverschwendung. Wenn Sie Ihr Layout beibehalten möchten, können Sie mit LineBreakMode basteln. – thinice

Verwandte Themen