从右到左语言的UIScrollView方向RTL

11 uiscrollview ios

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

小智 25

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

self.scrollView.transform = CGAffineTransformMakeRotation(M_PI);
subView.transform =  CGAffineTransformMakeRotation(M_PI);
Run Code Online (Sandbox Code Playgroud)

  • 我不是该解决方案的忠实拥护者,但是经过许多小时试图解决此问题之后,这才真正解决了问题。+1 (2认同)
  • 如果您不需要滚动指示,这是一个很好的解决方案:在这种情况下它将位于顶部。 (2认同)

小智 7

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];
Run Code Online (Sandbox Code Playgroud)

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

- (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);
}
Run Code Online (Sandbox Code Playgroud)