UICollectionViewFlowLayoutBreakForInvalidSizes 在调试器中捕获这个
Posted
技术标签:
【中文标题】UICollectionViewFlowLayoutBreakForInvalidSizes 在调试器中捕获这个【英文标题】:UICollectionViewFlowLayoutBreakForInvalidSizes to catch this in the debugger 【发布时间】:2018-02-27 07:49:48 【问题描述】:我正在尝试创建一个座位图布局功能,该功能采用坐标并创建一个我想提供地图包含的部分的值的地图。我正在使用自定义 collectionViewLayout 来创建单元格,但标题中出现了该错误。
这是我的协议-
protocol SeatMapDelegate: class
func getSectionCoordinates() -> [Int]
定义-
func getSectionCoordinates() -> [Int]
return sectionHeader
然后我将值分配给数组
var sectionHeader = [Int]()
sectionHeader=(delegate?.getSectionCoordinates())!
【问题讨论】:
【参考方案1】:下面的代码是我在地图上搜索和查找坐标的项目: 或许能帮到你
// ViewController.swift
// MapKit Starter
//
// Created by Ehsan Amiri on 10/25/16.
// Copyright © 2016 Ehsan Amiri. All rights reserved.
//
import UIKit
import MapKit
import Foundation
class ViewController: UIViewController
@IBOutlet var mapView: MKMapView?
@IBOutlet weak var text: UITextField!
var index = 0
var indexx = 0
let locationManager = CLLocationManager()
var picName:String?
var place :MKAnnotation?
var places = [Place]()
var place1 :MKAnnotation?
var places1 = [Place]()
override func viewDidLoad()
super.viewDidLoad()
//downpic()
self.requestLocationAccess()
override func viewWillAppear(_ animated: Bool)
let defaults = UserDefaults.standard
let age = defaults.integer(forKey: "maptype")
switch (age)
case 0:
mapView?.mapType = .standard
case 1:
mapView?.mapType = .satellite
case 2:
mapView?.mapType = .hybrid
default:
mapView?.mapType = .standard
@IBAction func info(_ sender: Any)
override var prefersStatusBarHidden: Bool
return true
func requestLocationAccess()
let status = CLLocationManager.authorizationStatus()
switch status
case .authorizedAlways, .authorizedWhenInUse:
return
case .denied, .restricted:
print("location access denied")
default:
locationManager.requestWhenInUseAuthorization()
@IBAction func textField(_ sender: Any)
mapView?.removeOverlays((mapView?.overlays)!)
mapView?.removeAnnotations((mapView?.annotations)!)
self.server()
_ = Timer.scheduledTimer(timeInterval: 10.0, target: self, selector: #selector(self.server), userInfo: nil, repeats: true)
let when = DispatchTime.now() + 1.5
DispatchQueue.main.asyncAfter(deadline: when)
if self.indexx != 0
self.addAnnotations()
self.addPolyline()
@objc func server()
place = nil
places = [Place]()
place1 = nil
places1 = [Place]()
indexx = 0
let id = text.text
print("id=\(id!)")
let url = URL(string: "my server")!
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let postString = "id=\(id!)"
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) data, response, error in
guard let data = data else // check for fundamental networking error
print("error=\(String(describing: error))")
return
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(String(describing: responseString))")
let stringgg = "notFound\n\n\n\n"
if responseString == stringgg
print(stringgg)
else
let json = try! JSONSerialization.jsonObject(with: data, options: [])
let betterJSON = json as! NSArray
let jsonCount = betterJSON.count
print(betterJSON)
for item in betterJSON
self.indexx += 1
let dictionary = item as? [String : Any]
let title = dictionary?["title"] as? String
let subtitle = dictionary?["description"] as? String
let latitude = dictionary?["latitude"] as? Double ?? 0, longitude = dictionary?["longitude"] as? Double ?? 0
self.place = Place(title: title, subtitle: subtitle, coordinate: CLLocationCoordinate2DMake(latitude , longitude ))
self.places.append(self.place as! Place)
print("latttt",longitude)
if self.indexx == 1
let shipid = UserDefaults.standard
shipid.set(title, forKey: "origin")
shipid.set(subtitle, forKey: "date")
if jsonCount == self.indexx
let shipid = UserDefaults.standard
shipid.set(title, forKey: "location")
self.place1 = Place(title: title, subtitle: subtitle, coordinate: CLLocationCoordinate2DMake(latitude , longitude ))
self.places1.append(self.place1 as! Place)
task.resume()
let when = DispatchTime.now() + 1.5
DispatchQueue.main.asyncAfter(deadline: when)
if self.indexx != 0
self.addAnnotations()
self.addPolyline()
func addAnnotations()
print("hhhh",places)
mapView?.delegate = self
mapView?.removeAnnotations((mapView?.annotations)!)
mapView?.addAnnotations(places1)
let overlays = places1.map MKCircle(center: $0.coordinate, radius: 100)
mapView?.addOverlays(overlays)
func addPolyline()
var locations = places.map $0.coordinate
let polyline = MKPolyline(coordinates: &locations, count: locations.count)
// print("Number of locations: \(locations.count)")
index = locations.capacity
mapView?.add(polyline)
extension ViewController: MKMapViewDelegate
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
if annotation is MKUserLocation
return nil
else
let annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: "annotationView") ?? MKAnnotationView()
annotationView.image = UIImage(named:"place icon")
annotationView.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
annotationView.canShowCallout = true
return annotationView
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer
if overlay is MKCircle
let renderer = MKCircleRenderer(overlay: overlay)
renderer.fillColor = UIColor.black.withAlphaComponent(0.5)
renderer.strokeColor = UIColor.blue
renderer.lineWidth = 2
return renderer
else if overlay is MKPolyline
let renderer = MKPolylineRenderer(overlay: overlay)
renderer.strokeColor = UIColor.orange
renderer.lineWidth = 2
return renderer
return MKOverlayRenderer()
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl)
//guard let annotation = view.annotation as? Place, let title = annotation.title else return
let shipidname = text.text
let shipid = UserDefaults.standard
shipid.set(shipidname, forKey: "shipid")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = storyboard.instantiateViewController(withIdentifier: "shipinfo")
self.present(secondViewController, animated: true, completion: nil)
【讨论】:
我有坐标,但我想在触发错误时以数组的形式将它们传递给自定义集合视图布局子类以上是关于UICollectionViewFlowLayoutBreakForInvalidSizes 在调试器中捕获这个的主要内容,如果未能解决你的问题,请参考以下文章