gpt4 book ai didi

ios - MKMapView 在 UITableView 上出队和重新排队时不断缩小

转载 作者:搜寻专家 更新时间:2023-11-01 07:12:47 26 4
gpt4 key购买 nike

我正在构建一个应用程序,它有一个 UITableController 和一个自定义 UITableViewCell,其中包含一个带有一些文本的 MKMapView。我的内容显示正确,但是当单元格出队或从 View 中删除时,一旦它重新出现, map 就会稍微缩小,并且随着你出队和重新排队的次数越来越多,它会不断缩小。有人可以帮我从这里出去吗?我进入 Storyboard编辑器并关闭了 mapView 的所有缩放和滚动,我不确定为什么 View 继续缩小。

TableViewController.swift:

....
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MapTableViewCell
cell.mapView.delegate = self
showRoute(routes: locationStructArray[indexPath.row].route, color: UIColor.green, mapView: cell.mapView)

return cell
}

func showRoute(routes:[MKRoute], color: UIColor, mapView: MKMapView){
for i in 0..<routes.count{
plotPolyLine(route: routes[i], color: color, mapView: mapView)
}
}

func plotPolyLine(route: MKRoute, color: UIColor, mapView: MKMapView){
let poly = route.polyline
let mypoly = MyColoredPolyline(points: poly.points(), count: poly.pointCount)
mypoly.color = color
mapView.add(mypoly)
if mapView.overlays.count == 1 {
mapView.setVisibleMapRect(mypoly.boundingMapRect, edgePadding: UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0), animated: false)
}
else {
let polylineBoundingRect = MKMapRectUnion(mapView.visibleMapRect, mypoly.boundingMapRect)
mapView.setVisibleMapRect(polylineBoundingRect, edgePadding: UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0), animated: false)
}
}

extension TableViewController: MKMapViewDelegate {
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let route: MyColoredPolyline = overlay as! MyColoredPolyline

let pr = MKPolylineRenderer(polyline: route)
pr.lineWidth = 3.0
pr.strokeColor = route.color
return pr
}
}

EDIT GIF 添加了建议:http://gph.is/2qAx6Ls

最佳答案

cell.mapView.removeOverlays(cell.mapView.overlays)

我认为这是因为您忘记从您将重用的同一 map View 中删除旧多段线:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = ...
cell.mapView.delegate = self
cell.mapView.removeOverlays(cell.mapView.overlays)
showRoute(routes: locationStructArray[indexPath.row].route, color: UIColor.green, mapView: cell.mapView)
return cell
}

更好的做法是在 MapTableViewCellprepareForReuse() 中执行此操作方法代替:

class MapTableViewCell: UITableViewCell {
...

override func prepareForReuse() {
super.prepareForReuse()
mapView.removeOverlays(mapView.overlays)
}
}

关于ios - MKMapView 在 UITableView 上出队和重新排队时不断缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44080333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com