带有约束和 RTL 的 UIScrollView 的奇怪行为

Eit*_*tan 5 uiscrollview right-to-left ios autolayout nslayoutconstraint

我有一个水平滚动视图,我可以在其中动态添加视图。在 LTR 语言上一切正常,我从左到右一个接一个地添加视图。在 RTL 上,问题是视图总是添加到滚动的左侧而不是像其他控制器一样添加到右侧,视图顺序正确添加的真正奇怪的工作人员,在第一个视图的左侧,所以他们从右到左排序,但在 -x 上的滚动视图之外。

这是我添加新视图时的代码:

Tag* tag = [self.storyboard instantiateViewControllerWithIdentifier:@"tag" ];
[_scroller addSubview:tag.view];
[tags addObject:tag];
Tag* prev = nil
for (Tag* tag in tags)
{
    if (prev == nil)
    {
        [_scroller addConstraint:[NSLayoutConstraint constraintWithItem:tag.view 
                                                       attribute:NSLayoutAttributeLeading                                                                                          
                                                       relatedBy:NSLayoutRelationEqual
                                                                     toItem:_scroller
                                                                  attribute:NSLayoutAttributeLeading
                                                                 multiplier:1.0f
                                                                   constant:0]];
    }
    else
    {
        [_scroller addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[prev]-10-[tag]"
                                                                          options:0
                                                                          metrics:nil
                                                                            views:@{@"tag" : tag.view, @"prev" : prev.view}]];
    }

    [_scroller addConstraint:[NSLayoutConstraint constraintWithItem:tag.view
                                                          attribute:NSLayoutAttributeCenterY
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:_scroller
                                                          attribute:NSLayoutAttributeCenterY
                                                             multiplier:1.0f
                                                               constant:0]];
    prev = tag;

}
Run Code Online (Sandbox Code Playgroud)

这是它如何在 LTR 和 RTL 上工作以及它如何实际工作的图像 在此处输入图片说明

Ree*_*edD 2

听起来更好的方法可能是使用UICollectionView. 然后,如果你想从右侧开始,你可以这样做:

NSIndexPath *lastIndex = [NSIndexPath indexPathForItem:data.count - 1 
                                             inSection:0];
[self.collectionView scrollToItemAtIndexPath:lastIndex 
                            atScrollPosition:UICollectionViewScrollPositionRight 
                                    animated:NO];
Run Code Online (Sandbox Code Playgroud)

这样他们UICollectionViewFlowLayout就可以为您处理安置事宜。