import Foundation
extension UIScrollView {
// Scroll to a specific view so that it's top is at the top our scrollview
func scrollToView(view:UIView) {
if let origin = view.superview {
// Get the Y position of your child view
let childStartPoint = origin.convert(view.frame.origin, to: self)
let bottomOffset = scrollBottomOffset()
if (childStartPoint.y > bottomOffset.y) {
setContentOffset(bottomOffset, animated: true)
} else {
setContentOffset(CGPoint(x: 0, y: childStartPoint.y), animated: true)
}
}
}
// Bonus: Scroll to top
func scrollToTop() {
let topOffset = CGPoint(x: 0, y: -contentInset.top)
setContentOffset(topOffset, animated: true)
}
// Bonus: Scroll to bottom
func scrollToBottom() {
let bottomOffset = scrollBottomOffset()
if(bottomOffset.y > 0) {
setContentOffset(bottomOffset, animated: true)
}
}
private func scrollBottomOffset() -> CGPoint {
return CGPoint(x: 0, y: contentSize.height - bounds.size.height + contentInset.bottom)
}
}
참고 : https://stackoverflow.com/a/39018651
위 소스를 참고 하시면 될 듯 합니다.
UIScrollView 내부에 존재하는 특정 View로 위치 하는 함수와 최상위, 최하위로 이동하는 함수가 구현 되어 있습니다.
특정 View 이동 시, Bottom 보다 혹시 더 많이 이동 될 경우 Bottom으로 고정 시키도록 예외 처리도 넣었습니다.
### 참고 사항
제가 테스트 해봤을 때는, setContentOffset에 animated 매개변수를 false로 할경우
이동이 되지 않는 버그가 있었습니다.
혹시, 이 원인을 아시거나 해결책을 아시는 분은 댓글 주시면 감사하겠습니다.
'나의 플랫폼 > iOS' 카테고리의 다른 글
[iOS] Invalid redeclaration of "Name" when used Core Data (0) | 2017.08.25 |
---|---|
[iOS] Close app in iOS Simulator (0) | 2017.08.24 |
[iOS] Use UILabel in UIScrollView with Autolayout (0) | 2017.07.20 |
[iOS] UITextView Scroll to top (0) | 2017.07.19 |
[iOS] CocoaPod 추가 해보기 (0) | 2017.07.11 |