从右到左语言的UIScrollView方向RTL

时间:2012-02-04 12:41:40

标签: ios uiscrollview

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

6 个答案:

答案 0 :(得分:21)

您可以通过将子视图中的var superSecret = function(spy){ for(var key in spy){ if(spy.hasOwnProperty(key)){ //code here spy[key] = "redacted"; } } return spy; } 旋转180(Pi)来实现它。

UIScrollView

答案 1 :(得分:6)

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);
}

答案 2 :(得分:4)

我尝试使用xCode 7和iOS 9工作正常。

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

答案 3 :(得分:2)

我不确定我是否正确理解了这个问题,但我这样理解:你想要一个(比如说)水平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设置在左侧。这意味着您现在可以向右滚动。

答案 4 :(得分:1)

你可以通过设置semanticContentAttribute来实现这一点

self.scrollView.semanticContentAttribute = .forceRightToLeft

答案 5 :(得分:0)

我将此代码用于Swift 3

self.scrollView.transform = CGAffineTransform(scaleX:-1,y: 1);