23

MKMapview でコンパスの配置を変更する方法を知っている人はいますか?

マップを回転させたときにマップの右上隅に表示されるコンパスについて話しています。

ナビゲーション バーの下で地図がぼやけて見えるようにしています。つまり、フレームの y 原点がナビゲーション バーの下になります。問題は、マップを回転させると、コンパス ボタンが自動的に右上隅に追加され、下のスクリーンショットでわかるように、navBar で覆われていることです。

スクリーンショット

コンパスについて話しているドキュメントを見たことがありません。誰かアイデアはありますか?

4

3 に答える 3

17

私のテストは、MKMapViewそれがどのようなコンテキストで表示されているかを何らかの形で知っていることを示しています。通常のコンパスを使用するUINavigationControllerと、コンパスが半透明の場合でもナビゲーション バーの下に配置されます。

UIViewControlleriOS 7 には、Y 軸上の実際のコンテンツの開始を定義する新しいプロパティがあります。といいtopLayoutGuideます。

残念ながら、Apple がさまざまなコンテンツでこのプロパティを計算するために使用する値に実際に影響を与えることはできません。また、ステータス バーの可視性にも依存します。

BUT:この問題を解決するために、カスタム ビュー コントローラーで返す単純なカスタム オブジェクトを作成しました。

@interface MiFixedLayoutGuide : NSObject <UILayoutSupport>
@property (nonatomic) CGFloat pbLength;
- (id)initWithLength:(CGFloat)length;
@end

@implementation MiFixedLayoutGuide

- (id)initWithLength:(CGFloat)length {
    self = [super init];
    if (self) {
        _pbLength = length;
    }
    return self;
}

- (CGFloat)length {
    return _pbLength;
}

@end

次に、UIViewControllerサブクラスで次の 2 つのメソッドをオーバーライドしました。

- (id<UILayoutSupport>)topLayoutGuide {
    return [[MiFixedLayoutGuide alloc]initWithLength:44];
}

- (id<UILayoutSupport>)bottomLayoutGuide {
    return [[MiFixedLayoutGuide alloc]initWithLength:44];
}

これにより、レイアウト ガイドが 44 ポイント挿入されます。はMKMapViewこれらの値を使用して、コンパスを上部に配置し、「法的」ラベルを下部に配置します。

ここで注意しなければならないことの 1 つは、自動レイアウト ビジュアル フォーマット言語内でレイアウト ガイドを使用できなくなったことです。

于 2013-09-19T20:21:19.563 に答える
16

iOS 8 では、次のことを簡単に行うことができます。

[someMapView setLayoutMargins:UIEdgeInsetsMake(20, 0, 20, 0)];
于 2015-09-13T15:33:35.197 に答える
6

迅速:

mapView.layoutMargins = UIEdgeInsets(top: 20, left: 0, bottom: 20, right: 0)

20 の代わりに UI 要素の高さを計算して、各デバイスまたは要素に合わせてより動的なソリューションを調整できます。

于 2016-03-31T18:55:06.997 に答える