【问题标题】:iOS: Autolayout causing UIScrollView to not scrolliOS:自动布局导致 UIScrollView 不滚动
【发布时间】:2013-08-03 03:03:06
【问题描述】:

我已经设置了一个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我用作导航栏的 UIImageView移动到屏幕底部。 我不知道该怎么办了,感谢任何帮助:)

【问题讨论】:

    标签: ios uiscrollview constraints autolayout


    【解决方案1】:

    两种解决方案:

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

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

    【讨论】:

    • 我尝试删除其中一个,但我不知道该怎么做。你能告诉我吗?
    • 单击约束上的小齿轮图标,如果允许,可以将其删除,或者将其更改为不太具体(例如变量或自动 - 所以它不在乎)。
    • 在此之后,自动布局对于iOS/Mac UI开发和UI编程将变得越来越重要。嵌入视图确实帮助我使滚动视图工作,同时仍然使用自动布局的所有好处。
    【解决方案2】:

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

    -(void)viewWillAppear:(BOOL)animated
    

    【讨论】:

      【解决方案3】:

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

      -(void)viewDidLayoutSubviews
      {
        [self.itemList setContentSize:CGSizeMake(required_width, required_height)];
      }
      

      【讨论】:

      • 太好了,请告诉我为什么我们需要添加这个方法。
      • 谢谢它也对我有用,但有什么区别+1
      猜你喜欢
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 2013-08-23
      • 2012-12-19
      • 2016-04-01
      • 2016-06-12
      • 1970-01-01
      相关资源
      最近更新 更多