2013-03-23 14 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); 

図:

|------------------------self.contentSize.width------------------------| 
         |-----self.width-----| 
|-------- offset --------| 
            ^center 
+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'で得られるsuper-relative-to-superviewが必要な場合を除き、' self.bounds'を使う傾向があります。 – Isaac

11

コード以下の使用:

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

スウィフト4

スクロールCにコンテンツの入力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) 
関連する問題