2016-12-12 5 views
1

Мне нужно увеличить UITableView height на основе UITableViewCell Размер контента. Я использую Custom Google Auto Complete. У меня есть UITextField. Когда я введу письмо в UITextField, он вызовет метод делегата shouldChangeCharactersIn.увеличить Высота таблицы на основе ячеек

Внутри этого метода я отправлю динамический запрос API автозаполнения Google, чтобы получить результат прогноза.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 

    if tableView.numberOfRows(inSection: 0) > 0 
    { 

    let newLength = (textField.text?.characters.count)! + string.characters.count - range.length 
    let enteredString = (textField.text! as NSString).replacingCharacters(in: range, with:string) 

    if newLength == 0 { 
     tableView.isHidden = true 
    } 

    if newLength > 0 
    { 
     address.removeAll() 
     self.tableView.isHidden = false 

     GetMethod("https://maps.googleapis.com/maps/api/place/autocomplete/json?input=\(enteredString)&key=MYAPIKEY", completion: { (resultDict) in 

      let resultArray = resultDict.object(forKey: "predictions")! as! NSArray 

      print(resultArray.count) 

      for temp in resultArray 

      { 
       let newtemp = temp as! NSDictionary 
       let tempAdd = newtemp.value(forKey:"description") as! String 
       let placeId = newtemp.value(forKey:"place_id") as! String 
       var dict = [String : AnyObject]() 
       dict["address"] = tempAdd as AnyObject? 
       dict["latlong"] = placeId as AnyObject? 
       self.address.append(dict as AnyObject) 
       print(newtemp.value(forKey:"description")) 
       print(self.address.count) 
       self.tableView.reloadData() 

      } 

     }) 
     } 
    return true 
} 

После того как я буду хранить все адреса в адресную массив динамически, мне нужно увеличить UITableView высоты на основе этого входящего контента адреса.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cellIdentifier = "TableViewCell" 
    var cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) 
    if cell == nil 
    { 
    cell = UITableViewCell(style: .default, reuseIdentifier: cellIdentifier) 
    } 

    let addresstoDisp = address[indexPath.row] as! NSDictionary 
    let name = addresstoDisp.value(forKey: "address") 
    cell?.textLabel?.numberOfLines = 0 
    cell?.translatesAutoresizingMaskIntoConstraints = false 

    cell?.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping 
    cell?.textLabel?.textAlignment = NSTextAlignment.center 
    cell?.textLabel?.text = name as! String 

    return cell! 
} 

UITableViewCell высота увеличивается отлично. Также мне нужно увеличить высоту tableView.

+2

Почему вы хотите увеличить высоту стола? Позвольте табличному обозреванию охватить всю вашу страницу и спроектировать все внутри нее, она будет автоматически прокручиваться. – rptwsthi

+0

У меня есть карты google в self.view и textField в верхней части карты. Если у меня есть только одна ячейка в представлении таблицы, я не хочу, чтобы представление таблицы охватывало полный контроллер просмотра. –

+0

Используйте это в viewDidLoad, self.tableView.tableFooterView = [[UIView alloc] initWithFrame: CGRectZero]; – KAR

ответ

4

Добавьте эти строки после создания ваших ячеек. Потому что он возвращает 0 height в viewDidLoad()

var frame = tableView.frame 
frame.size.height = tableView.contentSize.height 
tableView.frame = frame 
+0

спасибо .. это работает .. –

+0

не работает для меня –

+0

@DilipTiwari Вы используете автомат? –