如何在我的谷歌地图上添加一个标签栏?

时间:2016-09-14 04:22:30

标签: swift google-maps view swift2 uitabbar

我正在尝试在我的谷歌地图上添加一个标签栏,但是,每当我运行此代码时,xcode总是崩溃并告诉我“致命错误:在解开一个可选值时意外发现了nil”

这是我的代码:

 @IBOutlet var tabControlller: UITabBar!

override func loadView() {
    let camera = GMSCameraPosition.cameraWithLatitude(25.0330, longitude: 121.5654, zoom: 6.0)
    let mapView = GMSMapView.mapWithFrame(CGRectMake(10, 10, 10, 10), camera: camera)
    mapView.myLocationEnabled = true
    mapView.settings.tiltGestures = true
    mapView.settings.rotateGestures = true

    view = mapView
    view.insertSubview(tabControlller, aboveSubview: mapView)


    // Creates a marker in the center of the map
    let marker = GMSMarker()
    marker.position = CLLocationCoordinate2D(latitude: 25.0330, longitude: 121.5654)
    marker.title = "Taipei"
    marker.snippet = "Taiwan"
    marker.map = mapView

    let mapInsets = UIEdgeInsets(top: 100.0, left: 0.0, bottom: 0.0, right: 0.0)
    mapView.padding = mapInsets


}

我很确定错误来自view.insertSubview(tabControlller,aboveSubview:mapView)但是,我不确定如何在我的谷歌地图上添加该标签栏?我是通过编程方式还是通过IB来完成的?

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您无法在iOS中将UITabBar设置为顶部。您可以使用任何自定义控件。

见这个

https://developer.apple.com/reference/uikit/uitabbar

答案 1 :(得分:0)

您获得的错误是因为展开包含nil的可选变量。

在您的代码中tabControlller是可选的。

当您在以下地方使用它时:

view.insertSubview(tabControlller, aboveSubview: mapView)

它试图解开tabControlller并使用它。 但是直到这一点tabControlller可能没有初始化为任何对象,所以它包含nil。所以当打开nil时,应用程序会崩溃。

这就是你获得fatal error: unexpectedly found nil while unwrapping an Optional value

的原因

同样UITabBar无法添加到控制器的顶部。相反,您可以使用UISegmentedControlUIToolBar创建自定义控件。

答案 2 :(得分:0)

除了@ PGDev的回答之外,为了访问可选的值(如果它有一个),你需要打开它。可以安全地或强制地打开可选值。如果您强制解包一个可选项,并且它没有值,则程序将因上述消息而崩溃。 Source.您永远不应该明确强制使用!运算符展开可选项。可能存在使用!是可接受的情况 - 但如果您100%确定可选项包含值,则应该只使用它。

此外,UITabBar始终显示在屏幕的下边缘,并显示一个或多个UITabBarItem个对象的内容。但我找到了一些相关的答案,可能有助于如何将UITabBar放在首位。请参阅以下链接。

希望这有帮助!