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

时间:2016-01-23 23:52:40

标签: ios swift uiview storyboard swift2

在这个视图控制器中,我有一个导航栏,一个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设置为位于导航栏和故事板中的集合视图之间,则引脚将根据需要居中。但我没有显示导航栏的半透明度。

1

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

1

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

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

1 个答案:

答案 0 :(得分:0)

我一直在同一个问题上挣扎,并设法通过使用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) 上添加一些顶部填充来解决它:

{{1}}