我想知道是否有人知道你如何在mapview上移动合法标志,现在我的工具栏正在覆盖它。有谁知道怎么样?谷歌徽标有很多帮助,但苹果地图上没有任何帮助。
答案 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
中。
如果放置在viewDidLoad
或viewWillAppear
中,则会重置坐标。
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)
您可以通过设置+-----+---------+
| X | Y |
+-----+---------+
| 1 | 7 |
| 3 | 255 |
| 5 | 1895 |
| 8 | 12320 |
+-----+---------+
中的layoutMargins
来更改其位置。
例如,这将从底部将其推下:
mapView
您还可以一次更改所有需要的边缘插图:
mapView.layoutMargins.bottom = -100