2017-11-28 3 views
1

arbeite ich die Xamarin Effekte in diesem Artikel erwähnt habe versucht:Effect "Label.AdjustsFontSizeToFitWidth" hat keine Wirkung, während andere Effekte

https://smstuebe.de/2016/08/29/underlinedlabel.xamarin.forms/

(die sich von this Stackoverflow Frage abgeleitet).

Es funktioniert einwandfrei.

Wenn ich stattdessen versuche, den Label-Effekt "AdjustsFontSizeToFitWidth" anzuwenden, funktioniert es einfach nicht.

Für diese Prüfung, habe ich die Schriftgröße in der gleichen Beispielcode auf 300 gesetzt, und ich änderte diese Zeilen

  var label = (UILabel)Control; 
      var text = (NSMutableAttributedString)label.AttributedText; 
      var range = new NSRange(0, text.Length); 

zu diesen Linien:

  var label = (UILabel)Control; 
      var text = (NSMutableAttributedString)label.AttributedText; 
      var range = new NSRange(0, text.Length); 
      label.Lines = 1; 
      label.MinimumFontSize = 6; 
      label.AdjustsFontSizeToFitWidth = true; 

ich getestet habe es mit iPhone iPhone 6 iOS 11.1 und iPhone X iOS 11.1 im Simulator.

Gibt es etwas Besonderes an dieser Eigenschaft, das sie für Xamarin-Effekte unbrauchbar macht, oder ist es möglich, dass dieser Effekt nur auf einem echten Gerät funktioniert?

Antwort

1

Sie müssen sicherstellen, dass Sie auf den Label eine Linie Abschneiden setzen sonst die normale iOS LabelRenderer die Lines Eigenschaft auf 0 (dh unbegrenzte mehrzeiligen) setzen wird und somit gibt es nichts als die gesamte, um die Größe Steuerelement auf Größe an die Textgröße anpassen. Außerdem können Sie Lines nicht über einen Effekt festlegen, da der Routing-Effekt stattfindet, bevor der Renderer seine Eigenschaften festlegt und auf 0 zurückgesetzt wird.

Stellen Sie die Eigenschaft linebreak:

<Label Text="Welcome to SizeToFitEffects, SizeToFitEffects, SizeToFitEffects, SizeToFitEffects" 
    LineBreakMode="TailTruncation"> 
    <Label.Effects> 
     <sushi:LabelSizeToFitEffect /> 
    </Label.Effects> 
</Label> 

In der Wirkung ist es ratsam, die MinimumScaleFactor auf etwas setzen vernünftig sonst kann man mit einer Schriftart am Ende so klein, es unlesbar ist.

public class LabelSizeToFitEffect : PlatformEffect 
{ 
    protected override void OnAttached() 
    { 
     SetSizeToFit(true); 
    } 

    protected override void OnDetached() 
    { 
     SetSizeToFit(false); 
    } 

    void SetSizeToFit(bool sizeToFit) 
    { 
     var label = Control as UILabel; 
     label.AdjustsFontSizeToFitWidth = sizeToFit; 
     label.MinimumScaleFactor = 0.33f; 
    } 
} 
+0

Vielen Dank! Wie kannst du das Wissen? – tmighty

+1

@tmighty Weg zu vielen Jahren (!) Von benutzerdefinierten Formen Ich neige dazu, jetzt native zu bleiben .... – SushiHangover

+0

Aber Sie verwenden Xamarin.Forms und seine Kontrollen + Effekte, richtig? – tmighty

Verwandte Themen