this과 같은 뷰가 있습니다. 여기에 scrollview 옆에 tableview가 있습니다.테이블 너비를 바꿀 때 Swift Tableview가 위로 이동합니다
tableview에는 고정 된 표 셀 높이, 섹션 및 세로 스크롤이 없습니다. (단지 표준 tableview)
scrollview는 가로로 스크롤 할 수 있으며 그렇게함으로써 tableview 너비가 감소하거나 증가 할 수 있습니다. (그리고 스크롤 뷰는 반대입니다)
지금까지 모든 것이 작동합니다.
문제는 scrollview를 스크롤 할 때 (따라서 테이블 뷰 폭을 늘리거나 줄이는 경우) tableview가 약간 위로 스크롤된다는 것입니다.
내 첫 번째 생각은 tableviewoffset.y가 변경되지만 offset.y가 전혀 변경되지 않는다는 것입니다.
어떻게 해결할 수 있습니까?
편집 : 아직 내 문제가 아직 명확하지 않은 것으로 알고 있습니다. 설명하기 위해 예제 프로젝트를 만들었습니다. (Download link)
다음 단계를 따르십시오.
- 프로젝트를 실행
- 스크롤의 tableview (왼쪽) 아래있는 모든 방법은 왼쪽
- 드래그 "테스트"또는
- 있는 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)
}
}
}
(https://i.stack.imgur.com/r7OGq.jpg) (내가 대답으로이를 게시하고 이유입니다 아직 말씀 드릴 수 없습니다), I 네가 기대하고있는 것이 정확히 무엇인지, 그리고 잘못된 방향으로 움직이는 것은 정확히 모르겠다. 좀 더 명확해질 수 있을까요?편집 버튼을 사용하여 게시물을 편집하거나 주석 및 방향 화살표를 추가하여 이미지를 더 선명하게 만들 수 있습니다. – skymook