2017-04-04 6 views
2

私はUITableViewの上にある100ピクセルの高さのUIViewを持っています。上にスクロールすると、UIViewが私のUITableViewと一緒にスクロールするようにしたいのです。私のUIViewの50ピクセルがスクロールアップから隠されているとき、私はスクロールアップを続けている最上部にUIViewを固定したいと思います。これはどのように達成できますか?私は、私のUIViewのトップNSLayoutConstraint定数は、私のtableviewのコンテンツのオフセットに等しい変更を使用してみましたが、彼らは同じ速度でスクロールしません。あなたが必要なもの一緒にスクロールするUITableViewの上にビューを追加する方法。スクロール後にスティックに固定する

+0

あなたがこの回答に見てみる必要があります。http://stackoverflow.com/a/17583567/6203030何あなたが探していることにtableView –

答えて

0

は(あなたのViewControllerがtableviewDelegateプロトコルを実装するために覚えておいてください)あなたのtableViewのためviewForHeader inSectionメソッドを実装することであり、あなたはそれを持ってたら、UITableViewStylePlain

にごtableViewStyleを設定する必要があります場合は、あなたのコードを共有しますより多くのヘルプに興味があります。

出典:UITableView with fixed section headers

1

私はyou'rが正しく質問を理解している場合、あなたはこの

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    static CGFloat previousOffset; 
    CGRect rect = self.yourUIView.frame; 

    //NSLog you'r UIView position before putting any condition 
    // NSLog(@"Origin %f",rect.origin.y); 

    rect.origin.y += previousOffset - scrollView.contentOffset.y; 
    previousOffset = scrollView.contentOffset.y; 

    //assuming you'r UIView y position starts from 0 
    //Before setting the condition please make sure to run without any 
    //condition if not working 

    if(rect.origin.y>=-50 && rect.origin.y<=0){ 
      self.yourUIView.frame = rect; 
    } 
} 

はそれが役に立てば幸いようscrollViewDidScroll:方法テーブルビューを実装することによってそれを行うことができます...まず

+0

のスタイルは私のコードを言及するのを忘れています私は迅速にわからないので、Objective Cにあります... –

3

あなたのtableViewがgroupedであることを確認してください:

self.tableView = UITableView(frame: CGRect(x: 0, y: (self.navigationController?.navigationBar.frame.maxY)!, width: self.view.bounds.size.width, height: (self.view.bounds.size.height - (self.navigationController?.navigationBar.frame.maxY)!)), style: .grouped) 
self.tableView.delegate = self 
self.tableView.dataSource = self 
self.view.addSubview(self.tableView) 

そして、あなたはtableViewsubviewUIViewを追加する必要があります。

self.myView = UIView() 
self.myView.backgroundColor = UIColor.green 
self.myView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: 100) 
self.tableView.addSubview(self.myView) 

あなたの細胞が適切な場所にあるように、あなたのtableViewの最初のセクションの高さ100のヘッダを追加します。

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 
    return 100 
} 

次に、スクロールするときにUIViewのフレームを調整します。

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    let offset = scrollView.contentOffset.y 
    if(offset > 50){ 
     self.myView.frame = CGRect(x: 0, y: offset - 50, width: self.view.bounds.size.width, height: 100) 
    }else{ 
     self.myView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: 100) 
    } 
} 

デモ:

enter image description here

関連する問題