如何在地图标题iOS Xamarin(C#)

时间:2015-12-25 12:48:24

标签: c# ios xamarin xamarin.ios

我正在为iOS编写应用程序(Xamarin C#)

我有一些标题的地图,但它的字体太大了。我怎么能让它变小?

这是我的Map代码:

MKMapView map = new MKMapView (UIScreen.MainScreen.Bounds);

        map.AddAnnotations (new MKPointAnnotation (){

            Title="МУРАКАМИ В ТРЦ «ОКЕАН ПЛАЗА»",
            Subtitle ="Пн - Пт 10.00 -00.00" +
                " Cб.- Вс 10.00 - 00.00",

            Coordinate = new CLLocationCoordinate2D (50.412300, 30.522756)
        });

截图

enter image description here

1 个答案:

答案 0 :(得分:1)

在Swift或C#中,事情变得比它们应该更复杂(恕我直言),因为你无法覆盖MKPointAnnotation中的系统字体,因为你无法访问子视图构造(或层次结构),也没有做一些临时的ObjC系统字体调用上的魔力。

  • 如果有人知道如何告诉我; - )

我通常将这一切隐藏在一个子类中,使用完全自定义绘制的注释视图而不是MKPointAnnotation的MKMapView,但这种方式最容易理解。

因此,在开始添加注释之前,我将自定义委托分配给MKMapView的GetViewForAnnotationMKMapViewDelegate)属性。

示例设置/呼叫:

mapView.GetViewForAnnotation = myViewForAnnotation;
mapView.AddAnnotations (new MKPointAnnotation (){
    Title="МУРАКАМИ В ТРЦ «ОКЕАН ПЛАЗА»",
    Subtitle ="Пн - Пт 10.00 -00.00" +
    " Cб.- Вс 10.00 - 00.00",
    Coordinate = new CLLocationCoordinate2D (50.412300, 30.522756)
});

自定义GetViewForAnnotation(MKMapViewDelegate):

您可以在此处为需要创建的新MKPointAnnotation个对象分配自定义字体,但我们实际上是在创建自定义MKAnnotationView

public MyAnnotationView myViewForAnnotation(MKMapView mapView, IMKAnnotation id)
{
    if (id is MKPointAnnotation) {
        MyAnnotationView view = (MyAnnotationView)mapView.DequeueReusableAnnotation ("myCustomView");
        if (view == null) {
            view = new MyAnnotationView (id, "myCustomView", UIFont.FromName ("Chalkboard SE", 16f));
        } else {
            view.Annotation = id;
        }
        view.Selected = true;
        return view;
    }
    return null;
}

自定义MyAnnotationView(MKAnnotationView子类):

这将存储通过构造函数传递的自定义字体,并处理其子视图中存在的任何UILabel上的字体分配:

using System;
using MapKit;
using UIKit;

namespace mkmapview
{
    public class MyAnnotationView : MKAnnotationView // or MKPointAnnotation
    {
        UIFont _font;
        public MyAnnotationView (IMKAnnotation annotation, string reuseIdentifier, UIFont font) : base (annotation, reuseIdentifier)
        {
            _font = font;
            CanShowCallout = true;
            Image = UIImage.FromFile ("Images/MapPin.png");
        }

        void searchViewHierarchy (UIView currentView)
        {
            // short-circuit
            if (currentView.Subviews == null || currentView.Subviews.Length == 0) {
                return;
            }
            foreach (UIView subView in currentView.Subviews) {
                if (subView is UILabel) {
                    (subView as UILabel).Font = _font;
                } else {
                    searchViewHierarchy (subView);
                }
            }
        }

        public override void LayoutSubviews ()
        {
            if (!Selected)
                return;
            base.LayoutSubviews ();
            foreach (UIView view in Subviews) {
                Console.WriteLine (view);
                searchViewHierarchy (view);
            }
        }
    }
}

系统字体/默认大小:

enter image description here

系统字体/ 10分:

enter image description here

自定义字体(黑板)/ 10分):

enter image description here