我试图添加一堆UIButton到一个水平的UIScrollView使用以下代码,但是我没有看到任何东西,我所看到的只是一个白色的UIScrollBar。为什么会这样?我很确定我搞砸了一些东西,就像以前一样,它工作得很好。
self.category = [[NSArray alloc]initWithObjects:@"ALL", @"FOOD",@"NIGHT LIFE",@"ARTS & ENTERTAINMENT",@"SPORT", @"SHOP", @"COLLEGE & UNIVERSITY", @"TRAVEL SPOT", nil];
self.scrollView.delegate = self;
self.scrollView.scrollEnabled = YES;
self.scrollView.autoresizingMask = YES;
int xOffset = 0;
for(int index=0; index < [self.category count]; index++)
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button.titleLabel setTextAlignment:UITextAlignmentCenter];
[button setBackgroundImage:[UIImage imageNamed:@"CategoryTab.png"] forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setTag:index];
[button addTarget:self action:@selector(pressed:) forControlEvents:UIControlEventTouchUpInside];
[button setTitle:[self.category objectAtIndex:index] forState:UIControlStateNormal];
[button setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[button.titleLabel setFont:[UIFont fontWithName:@"bebas" size:15.0]];
CGSize maximumLabelSize = CGSizeMake(300,9999);
CGSize expectedLabelSize = [[self.category objectAtIndex:index] sizeWithFont:[UIFont fontWithName:@"ArialMT" size:15.0]
constrainedToSize:maximumLabelSize
lineBreakMode:UILineBreakModeWordWrap];
[button setFrame: CGRectMake(xOffset, 0, expectedLabelSize.width + 30, 38)];
[self.scrollView addSubview:button];
xOffset += expectedLabelSize.width + 30;
[button release];
}
self.scrollView.contentSize = CGSizeMake(xOffset, 38);
以下几个可能的原因:
- UIButton被频繁地释放一次。它创建了自动释放,然后添加到scrollview,然后释放,这实际上意味着它会在自动释放池结束时被dealloc。我很惊讶这车居然没有坠毁。您是否使用自动引用计数?
- 是自我。正确初始化滚动视图?如果是nil,它就会静默失败。
- 是"bebas"字体真的加载和可用吗?自定义字体加载在iOS上并不是那么简单。
:
- 你没有使用实际的按钮字体来测量标签大小。("bebas" vs "ArialMT")
- 您可能在第1行有泄漏。NSArray最好是自动释放(使用
[NSArray arrayWithObjects:...]
)。 -
autoresizingMask
不是BOOL值,它是标志的OR组合。