SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Xamarin.iOS ラベル

【 Xamarin 記事一覧 】

1 表示

f:id:furuya02:20140709015418p:plain:w150:left
ラベルの生成とビューへの追加の一例です。

public override void ViewDidLoad() {
    base.ViewDidLoad();
    
    //ラベルの生成
    var label = new UILabel(new RectangleF(0, 0, 200, 30)){
        Text = "Label",//表示文字列
        TextAlignment = UITextAlignment.Center,//センタリング
        TextColor = UIColor.FromRGB(255,0,0),//フォントの色
        Font = UIFont.FromName("Helvetica-Bold", 40f), //フォントの種類とサイズ
        Center = new PointF(View.Bounds.Width/2, View.Bounds.Height/2) //現在のビューの中央へ配置
    };
    Add(label);//ビューへの追加
}

2 自動調整表示

フォントサイズの調整

f:id:furuya02:20140709015458p:plain:w150:left
AdjustsFontSizeToFitWidthをtrueにすることで、ラベルのサイズにすべてのテキストが収まるようにフォントサイズが調整されます。また、MinimumScaleFactorで調整する場合の縮小限界も指定できます。


public override void ViewDidLoad() {
    base.ViewDidLoad();

    var label1 = new MyLabel(50,100);
    Add(label1);

    var label2 = new MyLabel(50, 150){
        AdjustsFontSizeToFitWidth = true, //ラベルのサイズにフォントサイズを調整する
        MinimumScaleFactor = 0.5f//調整する場合の、最小限界値
    };
    Add(label2);
}

sealed class MyLabel : UILabel {
    public MyLabel(int x,int y) {
        Frame = new RectangleF(x, y, 200, 30);//親ビューからの相対位置
        TextAlignment = UITextAlignment.Center;//センタリング
        BackgroundColor = UIColor.Orange; //背景色
        Text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//表示文字列
        Font = UIFont.FromName("Arial", 20f);//フォント
    }
}

テキストの切り捨て

f:id:furuya02:20140709015517p:plain:w150:left
LineBreakModeでサイズに収まらなかったテキストの切り捨ての方法を指定します。
UILineBreakMode.TailTruncation 最後切り捨て(デフォルト)
UILineBreakMode.MiddleTruncation 中間切り捨て
UILineBreakMode.HeadTruncation 最初切り捨て


public override void ViewDidLoad() {
    base.ViewDidLoad();

    var h = 30;
    foreach (var mode in new[] { UILineBreakMode.TailTruncation, UILineBreakMode.MiddleTruncation, UILineBreakMode.HeadTruncation }) {
        var label = new MyLabel(30, h){
            LineBreakMode = mode
        };
        Add(label);
        h += 30;
    }
}

sealed class MyLabel : UILabel {
    public MyLabel(int x, int y) {
        Frame = new RectangleF(x, y, 250, 25);//親ビューからの相対位置
        BackgroundColor = UIColor.Orange; //背景色
        Text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//表示文字列
        Font = UIFont.FromName("Arial", 15f);//フォント
    }
}

ラベルサイズの調整

f:id:furuya02:20140709015536p:plain:w150:left
SizeToFit()で、表示テキストを優先してラベル自体のサイズを調整することができます。また、プロパティLineを設定(行数指定)するとラベルが複数行となります。(0に設定すると、行数に制限はなくなる)


public override void ViewDidLoad() {
    base.ViewDidLoad();

    //1つ目のラベル(ラベルのサイズが優先される、テキストが省略される)
    var label1 = new MyLabel(30, 30);
    Add(label1);

    //2つ目のラベル(テキストが優先され、ラベルのサイズが変更される)
    var label2 = new MyLabel(30, 130);
    label2.SizeToFit(); //サイズ(高さ)を自動調整する
    Add(label2);
}

sealed class MyLabel : UILabel {
    public MyLabel(int x, int y) {
        Frame = new RectangleF(x, y, 230,70);//親ビューからの相対位置
        BackgroundColor = UIColor.Orange; //背景色
        Text = "気象庁の海老原智予報課長は8日夕の記者会見で、台風8号が10日に九州に接近または上陸し、西・東日本沿いに進む見通しであることについて、「九州や四国、紀伊半島の南東側斜面では大雨に厳重な警戒が必要だ」と話した。";//表示文字列
        Font = UIFont.FromName("Arial", 15f);//フォント
        Lines = 0; //行の制限なく改行する
    }
}

3 影

f:id:furuya02:20140709015550p:plain:w150:left
ShadowOffset(影のずれ具合)及びShadowColor(影の色)でテキストに影をつけることができます。
しかし、影をぼかすことができないため、表現には限界があります。


var label = new UILabel(new RectangleF(0, 0, 200, 30)){
    Center = new PointF(View.Bounds.Width/2, View.Bounds.Height/2),//中央に表示
    Text = "SAMPLE", //表示文字列
    Font = UIFont.FromName("Helvetica-Bold", 35f),//フォント指定
    ShadowOffset = new SizeF(3, 3), //影のずれ具合
    ShadowColor = UIColor.Gray, //影の色
    TextAlignment = UITextAlignment.Center //センタリング
};


【 Xamarin 記事一覧 】