Как я могу получить UITableView tableFooterView для расширения, чтобы заполнить все родительское представление? - PullRequest
10 голосов
/ 01 июня 2011

У меня есть UIView, который я устанавливаю как свойство свойства UITableView tableFooterView. В случаях, когда табличное представление и нижний колонтитул не заполняют все родительское представление, есть ли способ определить, насколько выше мне нужно сделать нижний колонтитул, чтобы он заполнил оставшееся пространство?

Моя конечная цель заключается в том, чтобы кнопка удаления была выровнена по нижней части окна. Если табличное представление больше родительского, я ничего не собираюсь делать, и кнопка «Удалить» будет отключена для запуска, и это нормально.

РЕДАКТИРОВАТЬ Это должно работать на iPad в модальном типе листа формы, где границы просмотра должны быть только для листа формы, а не для всего экрана.

Ответы [ 4 ]

14 голосов
/ 01 июня 2011

Вне моей головы: поскольку UITableViews - это, по сути, UIScrollViews, попробуйте использовать значение contentSize.height вашего табличного представления, чтобы увидеть, как оно занимает экран.Затем отрегулируйте фрейм tableFooterView, чтобы заполнить разницу в высоте от высоты фрейма его суперпредставления.По существу:

CGRect tvFrame = tableView.frame;
CGFloat height = tvFrame.size.height - tableView.contentSize.height;
if (height > MIN_HEIGHT) { // MIN_HEIGHT is your minimum tableViewFooter height
    CGRect frame = tableFooterView.frame;
    tableFooterView.frame = CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, height);
}
3 голосов
/ 22 ноября 2016

@ octy ответ будет работать для iOS 9. Однако для iOS 10 кажется, что contentSize tableView включает в себя высоту tableViewFooter. В iOS 10 мне нужно было сделать что-то вроде следующего:

var rowDataBounds: CGRect {
    get {
        if numberOfSections <= 0 {
            return CGRect(x: 0, y: 0, width: frame.width, height: 0)
        }
        else {
            let minRect = rect(forSection: 0)
            let maxRect = rect(forSection: numberOfSections-1)
            return maxRect.union(minRect)
        }
    }
}

fileprivate func resizeFooterView(){

    if let footerView = tableFooterView {

        var newHeight: CGFloat = 0
        let tvFrame = self.frame;

        if #available(iOS 10, *) {

            newHeight = tvFrame.size.height - rowDataBounds.height - self.contentInset.bottom - self.contentInset.top

        }
        else {

            newHeight = tvFrame.size.height - self.contentSize.height

        }
        if newHeight < 0 {
            newHeight = 0
        }
        let frame = footerView.frame
        if newHeight != frame.height {
            footerView.frame = CGRect(x:frame.origin.x, y:frame.origin.y, width:frame.size.width, height: newHeight)
        }
    }
}

override func layoutSubviews() {
    super.layoutSubviews()
    resizeFooterView()
}
0 голосов
/ 01 июня 2011
  CGRect parentFrame = myParentView.frame; //tells you the parents rectangle.
  CGRect tableFrame  = myTableView.frame; // tells you the tableView's frame relative to the parent.

  float delta = parentFrame.size.height - tableFrame.size.height - tableFrame.origin.y;

delta - расстояние между основанием таблицы и основанием представления контейнера.

0 голосов
/ 01 июня 2011

Только одна идея: если у табличного представления есть фиксированная высота строки, вы можете умножить количество строк на высоту строки плюс некоторое фиксированное количество.Если высота строки не фиксирована, вы можете суммировать все различные высоты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...