2013-03-23 4 views
18

아주 쉬운 문제이지만 원하는 결과를 얻는데 어려움이 있습니다. 이 컨텐츠를 중심으로되지 않는 이유 이해가 안contentOffset을 사용하여 UIScrollView의 내용을 중앙에 배치하는 방법

// 'self' is the UIScrollView 
CGFloat newContentOffsetX = (self.width/2) + (self.contentSize.width/2); 
self.contentOffset = CGPointMake(newContentOffsetX, 0); 

: 나는 수평 컨텐츠의 폭은 내가 가지고있는 콘텐츠를 중심으로하기 위해 노력하고있어 5000입니다 (320)의 폭에있는 UIScrollView 스크롤했다. 계산에 문제가있는 것을 볼 수 있습니까?

답변

52

난 당신이 원하는 생각 :

CGFloat newContentOffsetX = (self.contentSize.width/2) - (self.bounds.size.width/2); 

다이어그램 : C에

CGFloat newContentOffsetX = (scrollView.contentSize.width - scrollView.frame.size.width)/2; 
scrollView.contentOffset = CGPointMake(newContentOffsetX, 0); 
+1

"self.width"혼란에 대해 유감스럽게 생각합니다. 바로 UIView 항목으로 추가 한 바로 가기입니다. self.frame 대신 self.bounds를 사용하는 이유는 무엇입니까? – zakdances

+1

'self.width'는 문제가 아니라고 생각했습니다. 실제로 contentSize.width에서 빼고 싶습니다.하지만 습관에서'self.bounds'를 사용했습니다. 'self.bounds.size'와'self.frame.size'는 같아야합니다; 'self.frame.origin'으로 얻을 수있는 원점 - 상대 - 수퍼 뷰가 필요하지 않으면 나는'self.bounds'를 사용하는 경향이 있습니다. – Isaac

11

사용 내용 입력 : ScrollView

let centerOffsetX = (scrollView.contentSize.width - scrollView.frame.size.width)/2 
let centerOffsetY = (scrollView.contentSize.height - scrollView.frame.size.height)/2 
let centerPoint = CGPoint(x: centerOffsetX, y: centerOffsetY) 
scrollView.setContentOffset(centerPoint, animated: true) 
0

스위프트 4

스크롤 : 코드 아래

|------------------------self.contentSize.width------------------------| 
         |-----self.width-----| 
|-------- offset --------| 
            ^center 
관련 문제