【发布时间】:2021-05-30 21:26:33
【问题描述】:
我有一个 Mapbox 视图,我正在设置它然后添加为子视图。我认为在添加 Mapbox 视图时也可以添加该视图的子视图是合理的。但是,似乎我需要为第一个视图的每个子视图调用 addSubView。
这是我的 ViewController.swift 的全部内容:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var locationButton: UIButton!
@IBOutlet weak var buttonView: UIView!
@IBOutlet var mapView: MGLMapView!
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "mapbox://styles/billofbong/xxx/draft")
mapView = MGLMapView(frame: view.bounds, styleURL: url);
mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
mapView.setCenter(CLLocationCoordinate2D(latitude: xxx, longitude: -xxx), zoomLevel: 15, animated: false)
mapView.showsUserLocation = true
mapView.showsHeading = true;
view.addSubview(mapView)
view.addSubview(buttonView)
}
@IBAction func onLocationButtonPressed(_ sender: Any) {
mapView.userTrackingMode = .followWithHeading
}
}
我将 Mapbox 视图添加为子视图而不是仅将其作为 ViewController 中的原始视图的原因是,当它是活动视图时,更改参数似乎没有任何作用,所以我被卡住了默认地图参数。
谁能解释一下 addSubView 的情况?如果我有一堆按钮怎么办?我真的必须以编程方式添加每一个吗?我做错了什么?
【问题讨论】:
-
您似乎已经将视图添加到情节提要中,因为您正在使用 IBOutlets。
-
@Sweeper 视图在情节提要中,你是对的,但除非我执行 addSubView(),否则它们不会在运行时出现
-
您是否在情节提要的属性检查器中输入了 styleURL?
-
该按钮将作为情节提要的结果位于视图层次结构中,但您正在添加边界等于整个框架的地图视图,因此该按钮将位于其后面,因此不可见。您应该能够将
UIView添加到您的故事板并将其自定义类设置为MGLMapView,然后在viewDidLoad中设置任何所需的属性 -
@Paulw11 情节提要中的地图视图类型为
MGLMapView——除非它是情节提要入口点,否则一切正常,在这种情况下我无法更改其属性。有没有办法让按钮出现在地图视图的前面,就像它在情节提要中一样?我试过view.bringSubviewToFront(buttonView)并没有改变任何东西。
标签: ios swift storyboard