13

我想知道是否有人知道您如何在地图视图上移动法律标志,现在我的工具栏正在覆盖它。有谁知道怎么做?谷歌标志有很多帮助,但苹果地图上没有。

左下角的法律标志

4

11 回答 11

13

在斯威夫特:

mapView.layoutMargins = UIEdgeInsetsMake(top, right, -20, left)

我在 OS9 中对此进行了测试,并且可以正常工作。

斯威夫特 5.2

// -20 will make the legal disclaimer move down. If you want the
// disclaimer to move up, use a positive number.
mapView.layoutMargins = UIEdgeInsets(top: 0, left: 0, bottom: -20, right: 0)
于 2015-12-26T04:01:33.880 回答
10

这应该可行,虽然我不确定苹果是否会允许你这样做

UILabel *attributionLabel = [mapView.subviews objectAtIndex:1];
attributionLabel.center = CGPointMake(attributionLabel.center.x, attributionLabel.center.y - 44.0f);
于 2012-11-02T19:54:41.033 回答
8

这在 iOS 7 中仍然是可能的,但只有 (?) 如果放置在viewDidAppear. 如果放置在viewDidLoad或中,坐标将被重置viewWillAppear

    UILabel *attributionLabel = [mapView.subviews objectAtIndex:1];
    attributionLabel.center = CGPointMake(attributionLabel.center.x, attributionLabel.center.y - 44.0f);
于 2013-11-17T12:06:58.503 回答
7

这些方法不再适用于 iOS 7。正确的方法是在 UIViewController 上指定 bottomLayoutGuide。这里详细描述

于 2014-06-08T08:15:12.637 回答
3

更改位置不太有效,但是隐藏“合法”按钮效果很好。

[[mapView.subviews objectAtIndex:1] setHidden:YES]

编辑:

Swift 2.0 iOS 等效

mapView.subviews[1].isHidden = true

于 2015-05-31T19:37:40.383 回答
1

进行双向飞碟点。

我实施了您的方法,它运行良好,但是在多次进入视图控制器之后,法律标签 y 不断减少,因为您看到它总是自行置换的逻辑。所以我建议改为改变中心

我们改变框架

UILabel *attributionLabel = [mapView.subviews objectAtIndex:1];
    attributionLabel.frame = CGRectMake(20, self.view.frame.size.height - 135, attributionLabel.frame.size.width, attributionLabel.frame.size.height); 
\\135 is height of your bottom view that was hiding legal
于 2014-05-28T13:52:04.053 回答
1

我写了对我有用的扩展。它可以在动画块中用于动画这些变化:

import MapKit

extension MKMapView {

  /// Workaround for layoutMargins bug.
  func setLegalInsets(left: CGFloat, bottom: CGFloat) {
    let oldLeft = layoutMargins.left
    let oldBottom = layoutMargins.bottom

    let lblLegal = (subviews.filter { view in
      return view is UILabel
      }).first

    lblLegal?.frame.origin.x += left - oldLeft
    lblLegal?.frame.origin.y -= bottom - oldBottom

    layoutMargins.left = left
    layoutMargins.bottom = bottom
  }
}
于 2016-06-07T16:32:37.940 回答
1

@Dymtro 的回答对我来说效果很好,但我建议先检查子视图的大小。如果将来视图层次结构发生变化,这至少应该防止可能的崩溃:

override func viewWillLayoutSubviews() {
    positionLegalMapLabel()
}

func positionLegalMapLabel() {
    if self.mapView.subviews.count > 1 {
        let legalMapLabel = self.mapView.subviews[1]

        legalMapLabel.frame.origin = CGPointMake(self.mapView.bounds.size.width - legalMapLabel.frame.size.width - 7, legalMapLabel.frame.origin.y)
    }
}
于 2017-10-19T17:59:56.690 回答
1

斯威夫特 4+

layoutMargins您可以通过设置的来更改它们的位置mapView

例如,这会将其从底部推开:

mapView.layoutMargins.bottom = -100

您还可以一次更改所有需要的边缘插图:

mapView.layoutMargins = UIEdgeInsets(top: 0, left: 0, bottom: -100, right: 0)
于 2019-12-03T17:16:04.293 回答
0

一个基于 @xeieshan 示例的 Swift 3 示例,在针对 iOS 10 SDK 编译时有效。在我的示例中,我在底部有一个透明条,当地图视图出现时它会向上动画。标签重新定位也可以是动画的。

// reposition the 'Legal' label above the transparent bottom bar
// unfortunately there is no safe way to identify the label but it is the last subview - hopefully this will not change 
if let legalLabel = mapView.subviews.last {
    var frame = legalLabel.frame
    frame.origin.y = frame.origin.y - self.bottomBar.bounds.size.height // reposition it above the bottom bar
    legalLabel.frame = frame
}
于 2016-10-13T13:43:40.110 回答
0

使用 viewWillLayoutSubviews() 而不是 viewDidAppear() 来避免跳转。

override func viewWillLayoutSubviews() {
    positionLegalMapLabel()
}

func positionLegalMapLabel() {
    let legalMapLabel = self.mapView.subviews[1]

    legalMapLabel.frame.origin = CGPointMake(self.mapView.bounds.size.width - legalMapLabel.frame.size.width - 7, legalMapLabel.frame.origin.y)
}
于 2017-02-01T15:30:22.363 回答