在这个视图控制器中,我有一个导航栏,一个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设置为位于导航栏下方,我可以显示导航栏的半透明效果,但该引脚现在偏离中心。
如何让引脚显示在可见区域的中心,并显示导航栏的半透明效果?
我觉得这应该在文件中。但我一直在寻找没有运气的地方,也许我不知道要搜索的关键字。
我一直在努力解决这个问题,并设法通过使用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)