2017-11-06 5 views
0

this과 같은 뷰가 있습니다. 여기에 scrollview 옆에 tableview가 있습니다.테이블 너비를 바꿀 때 Swift Tableview가 위로 이동합니다

tableview에는 고정 된 표 셀 높이, 섹션 및 세로 스크롤이 없습니다. (단지 표준 tableview)

scrollview는 가로로 스크롤 할 수 있으며 그렇게함으로써 tableview 너비가 감소하거나 증가 할 수 있습니다. (그리고 스크롤 뷰는 반대입니다)

지금까지 모든 것이 작동합니다.

문제는 scrollview를 스크롤 할 때 (따라서 테이블 뷰 폭을 늘리거나 줄이는 경우) tableview가 약간 위로 스크롤된다는 것입니다.

내 첫 번째 생각은 tableviewoffset.y가 ​​변경되지만 offset.y가 ​​전혀 변경되지 않는다는 것입니다.

어떻게 해결할 수 있습니까?

편집 : 아직 내 문제가 아직 명확하지 않은 것으로 알고 있습니다. 설명하기 위해 예제 프로젝트를 만들었습니다. (Download link)

다음 단계를 따르십시오.

  1. 프로젝트를 실행
  2. 스크롤의 tableview (왼쪽) 아래있는 모든 방법은 왼쪽
  3. 드래그 "테스트"또는
  4. 있는 tableview 다시 봐 오른쪽 (이 숫자 49가)와 당신은 테이블 뷰가 "스크롤"되었음을 알 수 있습니다.

(1 제외한 모든 테이블 셀 번호()와 같은 문제에 대한 단계 (b) 스크롤 발생, 번호 (49)는 단지 예시 임)

편집 2 문제가 해결 ...

다음 줄을 삽입하면 문제가 해결되었습니다.

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat 
{ 
     return 55 
} 

고마워요!

합니다 (의 ViewController의 내 코드)

class ViewController: UIViewController 
{ 
    @IBOutlet weak var TableView: UITableView! 
    @IBOutlet weak var ScrollView: UIScrollView! 

    @IBOutlet weak var scrollViewWidth: NSLayoutConstraint! 
    @IBOutlet weak var TableViewWidth: NSLayoutConstraint! 

    var defaultTableViewWidth:CGFloat! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     self.defaultTableViewWidth = self.TableViewWidth.constant 
     self.scrollViewWidth.constant = 350 
    } 
} 

extension ViewController : UITableViewDelegate, UITableViewDataSource 
{ 
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return 55 
    } 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     return 50 
    } 

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

     let cell = tableView.dequeueReusableCell(withIdentifier: "TabCell", for: indexPath) as! TabCell 
     cell.clientLabel.text = "E" 
     cell.debtNumberLabel.text = "\(indexPath.row)" 
     return cell 
    } 

    func scrollViewDidScroll(_ scrollView: UIScrollView) { 

     print("b - offset: \(self.TableView.contentOffset.y)") 
     print("b - rowheight: \(self.TableView.rowHeight)") 
     print("b - cont height: \(self.TableView.contentSize.height)") 

     if scrollView == ScrollView 
     { 
      if scrollView.contentOffset.x < 0 
      { 
       self.TableViewWidth.constant += abs(scrollView.contentOffset.x) 
      } 
      else if scrollView.contentOffset.x > 0 && self.TableViewWidth.constant >= 60 
      { 
       self.TableViewWidth.constant = max(self.TableViewWidth.constant - scrollView.contentOffset.x, 0.0) 

       if self.TableViewWidth.constant >= 60 
       { 
        scrollView.contentOffset.x = 0 
       } 
       else 
       { 
        self.TableViewWidth.constant = 60 
       } 
      } 
     } 

     print("a - offset: \(self.TableView.contentOffset.y)") 
     print("a - rowheight: \(self.TableView.rowHeight)") 
     print("a - cont height: \(self.TableView.contentSize.height)") 
     print(" ") 

    } 

    func animateHeader(height: CGFloat) 
    { 
     self.TableViewWidth.constant = height 
     UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.5, options: UIViewAnimationOptions(), animations: { 
      self.view.layoutIfNeeded() 
     }, completion: nil) 
    } 

    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) 
    { 
     if self.TableViewWidth.constant > self.defaultTableViewWidth 
     { 
      animateHeader(height: self.defaultTableViewWidth) 
     } 
    } 

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) 
    { 
     if self.TableViewWidth.constant > self.defaultTableViewWidth 
     { 
      animateHeader(height: self.defaultTableViewWidth) 
     } 
    } 

} 
+0

(https://i.stack.imgur.com/r7OGq.jpg) (내가 대답으로이를 게시하고 이유입니다 아직 말씀 드릴 수 없습니다), I 네가 기대하고있는 것이 정확히 무엇인지, 그리고 잘못된 방향으로 움직이는 것은 정확히 모르겠다. 좀 더 명확해질 수 있을까요?편집 버튼을 사용하여 게시물을 편집하거나 주석 및 방향 화살표를 추가하여 이미지를 더 선명하게 만들 수 있습니다. – skymook

답변

0

다음과 같은 정보가 디버그 도움이 될

당신이 사용하는 어떤 제약
  • ?
  • 끌어 놓을 때 테이블 뷰 프레임 위치가 고정되어 있습니까? 어쩌면 무슨 일이 일어나고 있는지 비디오로 디버깅하는 데 도움이 될 것입니다.

은 당신의 [이미지]와