如何在mapview中移动合法签到

时间:2012-11-02 19:17:11

标签: objective-c mkmapview

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

Legal sign in bottom left corner

11 个答案:

答案 0 :(得分:11)

在斯威夫特:

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

我在OS9中对此进行了测试,但它确实有效。

答案 1 :(得分:9)

这应该有用,虽然我不确定Apple是否会允许你这样做

UILabel *attributionLabel = [mapView.subviews objectAtIndex:1];
attributionLabel.center = CGPointMake(attributionLabel.center.x, attributionLabel.center.y - 44.0f);

答案 2 :(得分:8)

这仍然可以在iOS 7中使用,但只有(?)放在viewDidAppear中。 如果放置在viewDidLoadviewWillAppear中,则会重置坐标。

    UILabel *attributionLabel = [mapView.subviews objectAtIndex:1];
    attributionLabel.center = CGPointMake(attributionLabel.center.x, attributionLabel.center.y - 44.0f);

答案 3 :(得分:7)

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

答案 4 :(得分:2)

改变位置并不是很有效,但隐藏“合法”按钮的效果非常好。

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

编辑:

Swift 2.0 iOS等价物

mapView.subviews [1] .isHidden = true

答案 5 :(得分:1)

继续Skeet Skeet点。

我实现了你的方法它运作良好但是在进入viewcontroller多次后,合法标签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

答案 6 :(得分: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)
    }
}

答案 7 :(得分:0)

我写的扩展程序对我有用。它可以在动画块中用于动画这些更改:

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
  }
}

答案 8 :(得分: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
}

答案 9 :(得分: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)
}

答案 10 :(得分:0)

快捷键4 +

您可以通过设置+-----+---------+ | X | Y | +-----+---------+ | 1 | 7 | | 3 | 255 | | 5 | 1895 | | 8 | 12320 | +-----+---------+ 中的layoutMargins来更改其位置。

例如,这将从底部将其推下:

mapView

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

mapView.layoutMargins.bottom = -100