如何在导航栏下方展开后修正视图的中心

问题描述 投票:1回答:1

在这个视图控制器中,我有一个导航栏,一个mkmapview和一个集合视图。我有以下代码:

import UIKit
import MapKit

class PhotoAlbumViewController: UIViewController {
    var annotation: VTAnnotation!
    var span: MKCoordinateSpan!

    @IBOutlet weak var mapView: MKMapView!
    @IBOutlet weak var collectionView: UICollectionView!

    override func viewDidLoad() {
        navigationController?.navigationBarHidden = false
        mapView.clipsToBounds = false
        mapView.addAnnotation(annotation)
        mapView.userInteractionEnabled = false
        let region = MKCoordinateRegion(center: annotation.coordinate, span: span)
        mapView.setRegion(region, animated: false)

    }
}

如果我的MKMapView设置为位于导航栏和故事板中的集合视图之间,则引脚将根据需要居中。但我没有显示导航栏的半透明度。

如果我的MKMapView设置为位于导航栏下方,我可以显示导航栏的半透明效果,但该引脚现在偏离中心。

如何让引脚显示在可见区域的中心,并显示导航栏的半透明效果?

我觉得这应该在文件中。但我一直在寻找没有运气的地方,也许我不知道要搜索的关键字。

ios swift uiview storyboard swift2
1个回答
0
投票

我一直在努力解决这个问题,并设法通过使用MKMapView方法向setVisibleMapRect(_:edgePadding:animated:)添加一些顶部填充来解决它:

    let span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)
    let region = MKCoordinateRegion(center: annotation.coordinate, span: span)

    // 1. Set the Region
    mapView.setRegion(region, animated: false)

    // 2. Store the currently visible area
    let currentMapRect = mapView.visibleMapRect

    // 3. Store the sum of the navigation bar height and the top safe area inset
    var topPadding: CGFloat = 0
    if let safeAreaTopInset = UIApplication.shared.keyWindow?.safeAreaInsets.top,
        let navigationBarHeight = navigationController?.navigationBar.frame.height {
        topPadding = safeAreaTopInset + navigationBarHeight
    }

    // 4. Add the top padding to the map's visible area
    let padding = UIEdgeInsets(top: topPadding, left: 0.0, bottom: 0.0, right: 0.0)
    mapView.setVisibleMapRect(currentMapRect, edgePadding: padding, animated: true)

    mapView.addAnnotation(annotation)
© www.soinside.com 2019 - 2024. All rights reserved.