12

我已经设置了一个UIScrollView我想显示水平布局的 12 个图像(只有 8 个适合屏幕)。在下图中,您可以看到我遇到的问题(这使我的滚动视图无法滚动)、我的约束以及UIScrollView我在情节提要上添加的约束:

显示约束的情节提要的屏幕截图

我在 上调用了以下方法-(void)viewDidLoad,在其中“设置”了我的滚动视图(itemList 是我的滚动视图属性, itemNames 是一个包含图像名称的数组):

- (void)setupHorizontalScrollView
{
    self.itemList.delegate = self;
    [self.itemList setTranslatesAutoresizingMaskIntoConstraints:NO];

    [self.itemList setBackgroundColor:[UIColor blackColor]];
    [self.itemList setCanCancelContentTouches:NO];

    self.itemList.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    self.itemList.clipsToBounds = NO;
    self.itemList.scrollEnabled = YES;
    self.itemList.pagingEnabled = NO;

    NSInteger tot=0;
    CGFloat cx = 0;
    for (; ; tot++) {
        if (tot==12) {
            break;
        }

        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.itemNames objectAtIndex:tot]]];

        CGRect rect = imageView.frame;
        rect.size.height = 40;
        rect.size.width = 40;
        rect.origin.x = cx;
        rect.origin.y = 0;

        imageView.frame = rect;
        [self.itemList addSubview:imageView];
        cx += imageView.frame.size.width;
    }

    [self.itemList setContentSize:CGSizeMake(cx, [self.itemList bounds].size.height)];
}

我添加了 [self.itemList setTranslatesAutoresizingMaskIntoConstraints:NO]; 因为我在其他帖子上看到了这个建议,但不管有没有它都不起作用。它起作用的唯一方法是,如果我取消选中情节提要上的使用 AutoLayout,但这会将UIImageView我用作导航栏的导航栏移动到屏幕底部。我不知道该怎么办了,任何帮助表示赞赏:)

4

3 回答 3

31

尝试设置您的滚动视图的内容大小 int "viewDidLayoutSubviews" 方法并保持自动布局设置。

-(void)viewDidLayoutSubviews
{
  [self.itemList setContentSize:CGSizeMake(required_width, required_height)];
}
于 2014-01-09T17:21:47.113 回答
9

两种解决方案:

  1. 创建可以同时满足的不同约束(您必须进行编辑)。我认为问题在于您的底部空间和顶部空间限制是相互排斥的。请删除一个,然后重试。如果这对您来说很困难,请尝试添加另一个UIView来包含UIScrollView以帮助管理您的约束,起初可能看起来很奇怪,但有时添加另一个视图来包含您的视图实际上会使每个级别都更简单。

  2. 关闭自动布局,并将您的自动调整大小蒙版更改为UIImageView您想要的。

于 2013-08-02T00:31:14.937 回答
3

插入:[scrollView setContentSize:CGSizeMake(x,y)];按以下方法:

-(void)viewWillAppear:(BOOL)animated
于 2013-08-02T05:58:03.970 回答