从右到左语言的UIScrollView方向RTL

我们是否可以更改UIScrollView在其反向模式下滚动RTL内容的行为。

您可以通过在子视图中旋转UIScrollView 180(Pi)来实现它。

 self.scrollView.transform = CGAffineTransformMakeRotation(M_PI); subView.transform = CGAffineTransformMakeRotation(M_PI); 
 count = 6; [self.scrollView setFrame:CGRectMake(scrollView.frame.origin.x, scrollView.frame.origin.y, 320, 480)]; [pageControl setNumberOfPages:count]; self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * count, self.scrollView.frame.size.height); for(int i=count-1; i>=0; i--) { //start adding content in reverse mode CGRect frame; frame.origin.x = self.scrollView.frame.size.width * (count - i - 1); //ar frame.origin.y = 0; frame.size = self.scrollView.frame.size; UIImageView *imageView = [[UIImageView alloc] initWithFrame:frame]; [imageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%i.png", i]]]; [self.scrollView addSubview:imageView]; } //scroll to the last frame as it's the first page for RTL languages CGRect frame; frame.origin.x = scrollView.frame.size.width * (count - 1); frame.origin.y = 0; frame.size = scrollView.frame.size; [self.scrollView scrollRectToVisible:frame animated:NO]; 

页面控件还需要将最后一个点指示为第一个点(或第一页)

 - (void)scrollViewDidScroll:(UIScrollView *)sender { // Update the page when more than 50% of the previous/next page is visible CGFloat pageWidth = self.scrollView.frame.size.width; int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1; self.pageControl.currentPage = (page % count); } 

我试着用xCode 7和iOS 9做的很好。

 [self._imagesScrollView setTransform:CGAffineTransformMakeScale(-1, 1)]; 

我不确定我是否正确理解了这个问题,但是我想这样:你想要一个(比方说)横向UIScrollView,你可以从右到左添加元素,当内容超过你想要的滚动视图框架时能够向左滚动而不是向右滚动才能看到最后的元素。

在这种情况下,您可以这样做。 对于每个新元素,计算所需的总宽度并将其设置为contentOffset:

 [scrollView setContentSize:CGSizeMake(self.childView.frame.size.width, scrollView.frame.size.height)]; 

上面我有一个childView,其中添加了元素。 它位于scrollView减去1个元素宽度内的最右侧位置。 每次添加元素时调用:

 [scrollView setContentOffset:CGPointMake(scrollView.contentOffset.x + kElementWidth,0.0)]; 

这将抵消左边的一切。 然后:

 self.videoQueueCollectionView.center = CGPointMake(self.childView.center.x + kElementWidth, self.childView.center.y); 

这会将eveything捕捉回到它的位置,而contentOffset设置在左边。 这意味着您现在可以向右滚动。