2016-11-21 4 views
0

Я работаю на следующее: ScreenshotИзменение размера полного экрана Tableview при нажатии

В основном это один UIImageView внутри другого UIImageView в верхней части (60% от экрана) и UITableView, который занимает 40% от экран

и код (см ниже):

То, что я пытаюсь добиться, чтобы изменить размеры ячеек полного экрана UITableView, когда мой customCell щелкнул и unsize его в своем первоначальном состоянии, когда unclicked.

Есть ли способ сделать эту работу? Спасибо заранее.

//Label outlets 

@IBOutlet weak var tableView: UITableView! 


var selectedIndexPath : IndexPath? = nil 


override func viewDidLoad() { 
    super.viewDidLoad() 

//MARK Start of CustomViewCell Code 

    tableView.register(UINib(nibName: "CustomViewCell", bundle: nil), forCellReuseIdentifier: "Cell") 

} 
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 5 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! CustomViewCell 

    cell.clipsToBounds = true 

    return cell 
} 

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

    let index = indexPath 

    if selectedIndexPath != nil { 
     if index == selectedIndexPath { 
      return 667 
     } else { 
      return 62 
     } 

    } else { 

     return 62} 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    switch selectedIndexPath { 
    case nil: 
     selectedIndexPath = indexPath 
    default: 
     if selectedIndexPath! == indexPath { 
      selectedIndexPath = nil 
     } else { 
      selectedIndexPath = indexPath 
     } 
    } 

    tableView.reloadRows(at: [indexPath], with: .automatic) 

} 

    //MARK End of CustomViewCell Code 
+0

Каково содержание вашего 'tableViewCell', которые вы собираетесь сделать полноэкранный режим? У этого есть 'imageView'? – Santosh

+0

Нет @Santosh 'labels' и' textView' – j0h4nf

ответ

1

Помимо перегрузки ячеек с новыми высотами, вам также необходимо изменить рамку вида таблицы. Если вы хотите, чтобы таблица занимает весь экран, убедитесь, что вы создаете IBOutlet для него, скажем myTableView, затем, после того, как:

tableView.reloadRows(at: [indexPath], with: .automatic) 

Добавьте этот код:

myTableView.frame = view.bounds 

Вы также можете создать переменную Bool для отслеживания нормальных и полноэкранных режимов представления таблицы и некоторую переменную CGRect для сохранения исходного кадра. Вам может понадобиться что-то вроде этого, когда вы хотите посмотреть таблицу, чтобы вернуться к исходному кадру:

myTableView.frame = initialTableViewFrame 

Надеется, что вы получите идею.

+0

Вы потеряли меня @ppalancia У меня возникла идея изменить размер таблицы tableView, которую я уже объявила как IBOutlet, но как я могу позволить этому же «tableView» быть Переменная Bool. Я пробовал несколько вещей, но не мог заставить его работать. Если вы знаете учебник, чтобы пройти через меня, это было бы здорово. Пожалуйста, не показывайте мне полное решение, так как я хочу понять, насколько могу я сам. Спасибо заранее. – j0h4nf

+0

@ j0h4nf ... Я имел в виду переменную/свойство Bool внутри вашего контроллера представления, к которому относится представление таблицы. Посмотрим, у меня есть время написать учебник для вас. – ppalancica

0

Вот чисто автоматически макет подход:

1.In вашего интерфейс строитель, создать UIImageView с ограничениями [Продольная, ведущей, сверху, снизу, высота], сделать высоту> = и приоритет 999 Вы будете использовать эту высоту позже в коде для логики expand/collapse. Elements Layouts

2.Create фиктивная UIView, высота которого будет программно установить позже, это UIView будет «толкать»/«растягиваться» ваш рост клеток при создании эффекта расширения для вашего ImageView. Установите видимость на скрытую, так как вам не нужно показывать это вашему пользователю. Elemets Layouts

3.In пользовательские ячейки, создать два NSLayoutConstraint экземпляров как @IBoutlets, один для высоты UIImageView и один для фиктивной высоты UIView затем соединить их позже в файле интерфейс.

let lowPriorityHeight : Float = 250; 
let highPriorityHeight : Float = 999; 
class CustomCell: UITableViewCell { 
    @IBOutlet weak var imgVwHeight: NSLayoutConstraint! 
    @IBOutlet weak var tempHeight : NSLayoutConstraint! 
    var isExpanded = false{ 
     didSet{ 
      imgVwHeight.priority = (isExpanded) ? lowPriorityHeight : highPriorityHeight; 
      if isExpanded == true{ 
       tempHeight.constant = ExpandedHeight 
      }else{ 
       tempHeight.constant = NormalHeight 
      } 
     } 
    } 

4.In ваш главный класс, установить isExpanded к истинным или ложным, чтобы создать эффект.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     let cell = tableView.cellForRow(at: indexPath) as! CustomCell 
     cell.isExpanded = !cell.isExpanded 
     tableView.reloadData() 
    } 
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell : CustomCell = tableView.dequeueReusableCell(withIdentifier: "kCustomCell", for: indexPath) as! CustomCell 
     return cell 
    } 

Вы можете загрузить мой пример реализации HERE

+0

спасибо @janusfidel, но это не решение, которое я ищу. Я действительно ищу способ заставить его работать так, как я начал. – j0h4nf

Смежные вопросы