Skip to main content

Xamarin.Form's autosized label

Please see Sabon Rai Software's solution here: https://sabonrai.wordpress.com/2016/02/14/xamarin-forms-xaml-label-adjusts-font-size-to-fit-width-of-content/#comment-3002

In short, the AutosizeLabelRenderer code looks like this:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[assembly: ExportRenderer (typeof(AutosizeLabel), typeof(AutosizeLabelRenderer))]
namespace <NAMESPACE>
{
 public class AutosizeLabelRenderer : LabelRenderer
 {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);

            var label = Control as UILabel;
            if (label != null)
            {
                label.AdjustsFontSizeToFitWidth = true;
                label.Lines = 1;
                label.BaselineAdjustment = UIBaselineAdjustment.AlignCenters;
                //label.LineBreakMode = UILineBreakMode.Clip;
                label.MinimumScaleFactor = new System.nfloat(0.5);
            }
        }
    }
}

Comments

Popular posts from this blog

Xamarin.Forms OnPlatform - TabbedPage vs NavigationPage

I switched my start page from a NavigationPage to a TabbedPage and all of a sudden the content overwrote the the carrier/battery row. I looked into this and discovered that the TabbedPage does not offset itself below this header in iOS (but works for android and windows). The solution is to add a platform dependent offset or padding thickness of 20 pixels.

Xamarin.Forms persistance (aka save/load local settings)

I just learned and implemented how to persist local settings for a xamarin.forms app. At first read, I noticed that xamarin.forms Application.Current.Properties supports this functionality but I wasn't able to figure it out. Usually I like to use default functionality when available but this simple API was not working for me. So I did some research and found a bunch of alternatives from James Montemagno's settings plugin to the realm mobile database. For my simple needs at this time, I nuget'ed the settings plugin and had it working in 2-3m (only because I spent a minute reading the GettingStarted.html). The code is simple and looks like:

Save:
CrossSettings.Current.AddOrUpdateValue("Securities", _addedSecurities.ToFlatFile(','));

Load:
protected override void OnStart()
{
string securitiesCsv = CrossSettings.Current.GetValueOrDefault("Securities", string.Empty);
}