您可以通过设置地图视图的填充来更改地图控件的位置。
let mapView = GMSMapView()
mapView.isMyLocationEnabled = true
mapView.settings.myLocationButton = true
mapView.padding = UIEdgeInsets(top: 0, left: 0, bottom: 50, right: 50)
е®ғдјҡж”№еҸҳвҖңжҲ‘зҡ„дҪҚзҪ®вҖқжҺ§д»¶зҡ„еЎ«е……гҖӮд»Һеә•йғЁ50еғҸзҙ е’ҢеҸідҫ§50еғҸзҙ гҖӮ
иҜ·еҸӮиҖғдёӢйқўзҡ„еұҸ幕жҲӘеӣҫпјҢе®ғж·»еҠ дәҶжқҘиҮӘеә•йғЁе’ҢеҸідҫ§еҗ„50еғҸзҙ зҡ„еЎ«е……гҖӮ
针对Swift 4的更新:仅修改“我的位置”按钮的位置即可。
for object in self.mapView.subviews{
if(object.theClassName == "GMSUISettingsPaddingView"){
for view in object.subviews{
if(view.theClassName == "GMSUISettingsView"){
for btn in view.subviews{
if(btn.theClassName == "GMSx_QTMButton"){
var frame = btn.frame
frame.origin.y = frame.origin.y - 100
btn.frame = frame
}
}
}
}
}
}
public extension NSObject {
public var theClassName: String {
return NSStringFromClass(type(of: self))
}
}
像 Subramanian 一样,这非常有效:
mapView.padding = UIEdgeInsets(top: 0, left: 0, bottom: 50, right: 0)
如果您的应用程序中有导航栏,则这非常完美。
这是我为Google Maps SDK 5.1.0编写的函数,因为按钮的类名已更改为 'GMSx_MDCFloatingButton',以防有人需要更新的方法。
另外,根据您的实现,您可能希望在viewDidAppear()上调用此函数。
func moveLocationButton(){
for object in self.googleMapsView!.subviews{
if(object.thisClassName == "GMSUISettingsPaddingView"){
for view in object.subviews{
if(view.thisClassName == "GMSUISettingsView"){
for btn in view.subviews{
if(btn.theClassName == "GMSx_MDCFloatingButton"){
var frame = btn.frame
frame.origin.x = frame.origin.x - 50
frame.origin.y = frame.origin.y - 150
btn.frame = frame
}
}
}
}
}
}
}
public extension NSObject {
var thisClassName: String {
return NSStringFromClass(type(of: self))
}
}
frame.origin
。 我通过将frame.origin
放置在viewDidAppear
中来使其工作。 没有正确的方法可以从viewWillApper
或viewWillLayoutSubviews
中调用。 但是,我成功地从viewDidLoad
中调用约束更改来使其完美运作。 我使用了snapkit,但使用本地方法也不是什么大问题。private func changeCurrentLocationButtonPosition(of mapView: GMSMapView) {
for object in mapView.subviews where object.theClassName == "GMSUISettingsPaddingView" {
for view in object.subviews where view.theClassName == "GMSUISettingsView" {
for btn in view.subviews where btn.theClassName == "GMSx_MDCFloatingButton" {
btn.snp.makeConstraints({ maker in
maker.left.equalToSuperview().offset(15)
})
btn.snp.makeConstraints({ maker in
maker.bottom.equalToSuperview().offset(-30)
})
return
}
}
}
}
func changeLocationBtnFrame(){
self.mapView.settings.myLocationButton = true
for obj in self.mapView.subviews{
if String(describing: obj.classForCoder) == "GMSUISettingsPaddingView"{
for viw in obj.subviews{
if String(describing: viw.classForCoder) == "GMSUISettingsView"{
for btn in viw.subviews{
if String(describing: btn.classForCoder) == "GMSx_MDCFloatingButton"{
var frame = btn.frame
btn.frame = CGRect(x: 316, y: 0, width: 56, height: 56)
//USE you want frame this line
break
}
}
break
}
}
break
}
}
}