Вот вариант вышеописанного, реализованного в Swift:
var cellRect = tableView.rectForRowAtIndexPath(indexPath)
if let superview = tableView.superview {
let convertedRect = tableView.convertRect(cellRect, toView:superview)
let intersect = CGRectIntersection(tableView.frame, convertedRect)
let visibleHeight = CGRectGetHeight(intersect)
}
visibleHeight
являющаяся частью видимой ячейки. Можно добавить еще один шаг, чтобы вычислить соотношение между нулем и единицей видимой ячейки:
var cellRect = tableView.rectForRowAtIndexPath(indexPath)
if let superview = tableView.superview {
let convertedRect = tableView.convertRect(cellRect, toView:superview)
let intersect = CGRectIntersection(tableView.frame, convertedRect)
let visibleHeight = CGRectGetHeight(intersect)
let cellHeight = CGRectGetHeight(cellRect)
let ratio = visibleHeight / cellHeight
}
Чтобы изменить внешний вид представления в зависимости от видимости - как указано в вопросе выше - этот код должен быть включен в представление таблицы UIScrollView делегат суперкласса, UIScrollViewDelegate метод scrollViewDidScroll .
Однако это повлияет только на ячейки при их прокрутке Клетки, уже видимые, не будут затронуты. Для них тот же код должен применяться в методе UITableViewDelegate didEndDisplayingCell .