代码之家  ›  专栏  ›  技术社区  ›  WhatTheHeckTech

子视图未使用容器的完整视图

  •  0
  • WhatTheHeckTech  · 技术社区  · 7 年前

    因此,我使用UIView作为子视图的容器,子视图将在其中保存Google地图。在实现它之后,由于子视图没有像应该的那样使用完整的容器,仍然可以看到一些容器。我做错什么了吗?我是否缺少一些代码? 这就是它目前的样子。。。 https://imgur.com/a/k0pj0

    class SecondViewController: UIViewController, 
    CLLocationManagerDelegate, LocateOnTheMap, 
    GMSAutocompleteFetcherDelegate, UISearchBarDelegate {
    
    
    
    func didAutocomplete(with predictions: [GMSAutocompletePrediction]) {
    for prediction in predictions {
    
        if let prediction = prediction as GMSAutocompletePrediction?{
            self.resultsArray.append(prediction.attributedFullText.string)
        }
    }
    self.searchResultController.reloadDataWithArray(self.resultsArray)
    print(resultsArray)
     }
    
     func didFailAutocompleteWithError(_ error: Error) {
    
     }
    
    
    @IBOutlet weak var MapViewContainer: UIView!
    
    var googleMapsView: GMSMapView!
    var searchResultController: SearchResultsController!
    var resultsArray = [String]()
    var gmsFetcher: GMSAutocompleteFetcher!
    
     @IBAction func searchWithAddress(_ sender: AnyObject) {
     let searchController = UISearchController(searchResultsController: searchResultController)
    searchController.searchBar.delegate = self
    self.present(searchController, animated:true, completion: nil)
    
    
     }
    
    
     let locationDelegate = LocationDelegate()
     var latestLocation: CLLocation? = nil
     var yourLocationBearing: CGFloat { return 
     latestLocation?.bearingToLocationRadian(self.yourLocation) ?? 0 }
     var yourLocation: CLLocation {
    get { return UserDefaults.standard.currentLocation }
    set { UserDefaults.standard.currentLocation = newValue }
    }
    
    //Location Manager Variable
    
    let manager = CLLocationManager()
    
     //viewDidLoad
    
    override func viewDidLoad() {
    super.viewDidLoad()
    
    //Map Options
    
    self.googleMapsView = GMSMapView(frame: self.MapViewContainer.bounds)
    self.googleMapsView.clipsToBounds = true
    self.MapViewContainer.addSubview(self.googleMapsView)
    
    searchResultController = SearchResultsController()
    searchResultController.delegate = self
    gmsFetcher = GMSAutocompleteFetcher()
    gmsFetcher.delegate = self
    
    googleMapsView.isMyLocationEnabled = true
    googleMapsView.mapType = .normal
    googleMapsView.settings.compassButton = true
    googleMapsView.settings.myLocationButton = true
    googleMapsView.settings.zoomGestures = true
    
    }
    
     func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    
     let location = locations.last
    
     let camera = GMSCameraPosition.camera(withLatitude: (location?.coordinate.latitude)!, longitude:(location?.coordinate.longitude)!, zoom:14)
    googleMapsView.animate(to: camera)
    
    //Finally stop updating location otherwise it will come again and again in this delegate
    self.locationManager.stopUpdatingLocation()
    
    }
    
    func locateWithLongitude(_ lon: Double, andLatitude lat: Double, andTitle title: String) {
    
     DispatchQueue.main.async { () -> Void in
    
        let position = CLLocationCoordinate2DMake(lat, lon)
        let marker = GMSMarker(position: position)
    
        let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: lon, zoom: 10)
        self.googleMapsView.camera = camera
    
        marker.title = "Address : \(title)"
        marker.map = self.googleMapsView
    
    
    }
    
    }
    
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    
    
    self.resultsArray.removeAll()
    gmsFetcher?.sourceTextHasChanged(searchText)
    
    
    }
    
    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    
    }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Reinier Melian    6 年前

    您需要覆盖 viewDidLayoutSubviews 正如我在评论中所说的那样

    func viewDidLayoutSubviews() { 
      super.viewDidLayoutSubviews() 
      self.googleMapsView.frame = self.MapViewContainer.bounds 
    }   
    

    您还需要删除此行 self.googleMapsView.clipsToBounds = true 在里面 viewDidLoad