3

我已经看到了很多关于这个主题的 Stack Overflow 线程(以及iOS 6 发行说明),但似乎没有一个对我有帮助,或者我无法理解它们。我拥有的是一个大小为 (244, 46) 的滚动视图,我想通过分页滚动到其宽度的两倍。

我的故事板,显示按钮列表和约束列表,以及不会删除的紫色约束

在我的情节提要中,我已经布置了滚动视图及其子视图(一行UIButtons) - 我设置了它们的起源,但删除了所有约束,即“将空间引导到superview”。我将它们替换为“Leading space to button”——连续按钮之间的水平间距。在代码中,我将按钮的 translatesAutoresizingMaskIntoConstraints 设置为 NO。

但是,我无法让滚动视图滚动。它只是弹跳以表明滚动视图边界的右侧有一些东西,只是遥不可及。有什么我做错了,或者我需要其他什么来让它工作吗?

哦,还有一个“哦,在 Interface Builder 中的最后一个可见按钮(不是该行中的最后一个按钮)上 Trailing space to superviewsuperview ”约束,并且在第一个不会被删除的按钮上有一个“Leading space to”约束(请参见图像中的紫色约束)。他们烦人地只是突然出现在列表中的不同位置!为什么会发生这种情况,为什么没有正确设置内容大小?

谢谢你的时间!

4

1 回答 1

0

我接受了@robmayoff 的建议,并将我的按钮创建移到了代码中,它奇迹般地起作用了。(我担心自动布局对我来说仍然是希腊语,但我以某种方式管理它。)如果将来有人需要创建按钮的滚动列表,这是一种不涉及contentSize明确设置的方法,如果比IB丑一点。

self.toolbarScrollView.translatesAutoresizingMaskIntoConstraints = NO;

NSMutableArray *toolbarItems = [NSMutableArray array];

//Unfortunately, you'll have to set the contentWidth manually - in viewDidLoad
// the frames aren't set yet. 47.0 is the size (38) + margin (9) of one of my
// buttons.
CGFloat x = contentWidth - 47.0;

//This code lets you page the scroll view with more spacing between items on 
//different pages.
int itemCountPerPage = 5;
NSArray *images = @[/*...titles of images...*/];
SEL selectors[10] = {
    //button selectors
};

UIButton *lastButton = nil;

for (int i = 0; i < [images count]; i++)
{
    NSString *imageName = [images objectAtIndex:i];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.translatesAutoresizingMaskIntoConstraints = NO;
    [button setImage:[UIImage imageNamed:imageName maskedWithColor:[UIColor whiteColor]] forState:UIControlStateNormal];
    button.showsTouchWhenHighlighted = YES;
    if (selectors[i] != NULL)
        [button addTarget:self action:selectors[i] forControlEvents:UIControlEventTouchUpInside];
    [self.toolbarScrollView addSubview:button];
    [toolbarItems addObject:button];

    if (lastButton)
    {
        NSDictionary *dict = NSDictionaryOfVariableBindings(lastButton, button);
        [self.toolbarScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:[lastButton(==38)]-%g-[button(==38)]-%g-|", (i % itemCountPerPage == 0 ? 18.0 : 9.0), x] options:NSLayoutFormatAlignAllCenterY metrics:nil views:dict]];
        [self.toolbarScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-4-[button(==38)]-4-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:dict]];
    }
    else
    {
        NSDictionary *dict = NSDictionaryOfVariableBindings(button);
        [self.toolbarScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-9-[button(==38)]-%g-|", x] options:NSLayoutFormatAlignAllCenterY metrics:nil views:dict]];
        [self.toolbarScrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-4-[button(==38)]-4-|" options:NSLayoutFormatAlignAllCenterY metrics:nil views:dict]];          
    }

    x -= (i % itemCountPerPage == itemCountPerPage - 1 ? 56.0 : 47.0);  //Extra space to allow for paging
    lastButton = button;
}

我希望这对某人有所帮助,因为它确实给简单的滚动视图带来了很多麻烦!谢谢你的帮助。

于 2013-06-27T03:22:19.023 回答