如何使用contentOffset将内容置于UIScrollView中

这应该是一个非常简单的问题,但我无法获得所需的结果。 我已经水平滚动UIScrollView,宽度为320.其内容的宽度为5000.我试图将内容集中在:

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

我不明白为什么这不是内容的中心。 你能看出计算出错吗?

我想你想要:

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

图:

 |------------------------self.contentSize.width------------------------| |-----self.width-----| |-------- offset --------| ^ center 

使用以下代码:

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

斯威夫特4

滚动到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) 

不是最好的解决方案,但可能适合您

 - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; [self centerScrollViewAnimated:NO]; } - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale { [self centerScrollViewAnimated:YES]; } - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset { *targetContentOffset = [self suggestedCenteredContentOffset]; } - (CGPoint)suggestedCenteredContentOffset { CGSize imageSize = self.pickedImage.size; CGSize containerSize = self.zoomingScrollView.bounds.size; CGPoint result = self.zoomingScrollView.contentOffset; if ( self.zoomingScrollView.zoomScale * imageSize.width < containerSize.width ) result.x = MIN((self.zoomingScrollView.zoomScale * imageSize.width - containerSize.width)/2, 0); if ( self.zoomingScrollView.zoomScale * imageSize.height < containerSize.height ) result.y = MIN((self.zoomingScrollView.zoomScale * imageSize.height - containerSize.height)/2, 0); return result; } - (void)centerScrollViewAnimated:(BOOL)animated { [self.zoomingScrollView setContentOffset:[self suggestedCenteredContentOffset] animated:animated]; }