Как создать показ первой ячейки индекса UITableview при просмотре половин баннера с помощью Swift? - PullRequest
0 голосов
/ 10 февраля 2019

Мой сценарий, я пытаюсь создать UITableview с card effects и верхним баннером.Я добавил, что это будет работать как stretchable tableview header.Все, что я делаю, используя storyboard, но я застрял в показе half из tableview first index cell show on banner head.Я попробовал multiple идей, но не закончил.Предоставьте некоторую идею для достижения этого design.

Токовый выход:

Current output screen

Ожидаемый выход:

Expected output screen

1 Ответ

0 голосов
/ 17 февраля 2019

Из вашего демонстрационного проекта ЗДЕСЬ Я внес некоторые изменения в ваш существующий код, например ваш scrollViewDidScroll будет:

var lastContentOffset: CGFloat = 0

func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
    self.lastContentOffset = scrollView.contentOffset.y
}


func scrollViewDidScroll(_ scrollView: UIScrollView) {

    if self.lastContentOffset < scrollView.contentOffset.y {
        //Up
        let y = 220 - (scrollView.contentOffset.y + 220)
        let height = min(max(y, 60), 220)
        if height >= 128 {
            imageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: height + 70)
        }
    } else if self.lastContentOffset > scrollView.contentOffset.y {
        //Down
        let y = 300 - (scrollView.contentOffset.y + 300)
        let height = min(max(y, 60), 400)
        imageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: height + 80)
    }
}

С помощью приведенного выше кода я добавил различные условия дляи вниз по вашему требованию, и из раскадровки я изменил ограничение top на 84, чтобы ваша таблица не прокручивалась до верха.

enter image description here

ТакВаш полный код будет выглядеть так:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    let imageView = UIImageView()
    var lastContentOffset: CGFloat = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.estimatedRowHeight = 50
        tableView.contentInset = UIEdgeInsetsMake(220, 0, 0, 0)
        tableView.backgroundColor = UIColor.darkGray


        imageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 300)
        imageView.image = UIImage.init(named: "poster")
        imageView.contentMode = .scaleAspectFill
        imageView.clipsToBounds = true
        view.addSubview(imageView)
        self.tableView.backgroundColor = .clear
        self.view.bringSubview(toFront: tableView)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}


extension ViewController: UITableViewDelegate, UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 20
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell
        switch indexPath.row % 2 {
        case 0:
            cell.titleLabel.text = "Lorem Ipsum is simply dummy text ."
            cell.contentView.backgroundColor = UIColor.darkGray
        default:
            cell.contentView.backgroundColor = UIColor.black
            cell.titleLabel.text = "There is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain..."
            cell.titleLabel.textColor = .white
        }
        return cell
    }

    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        self.lastContentOffset = scrollView.contentOffset.y
    }


    func scrollViewDidScroll(_ scrollView: UIScrollView) {

        if self.lastContentOffset < scrollView.contentOffset.y {
            let y = 220 - (scrollView.contentOffset.y + 220)
            let height = min(max(y, 60), 220)
            if height >= 128 {
                imageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: height + 70)
            }
        } else if self.lastContentOffset > scrollView.contentOffset.y {
            let y = 300 - (scrollView.contentOffset.y + 300)
            let height = min(max(y, 60), 400)
            imageView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: height + 80)
        }
    }
}

И результат будет:

enter image description here

ЗДЕСЬ isссылка на ваш обновленный проект.

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