Preston Cheung Preston Cheung - 1 year ago 82
iOS Question

UIScrollView does not scroll

I got a problem about UIScrollView. I am making a custom view which inherits UIView. The view has a UIScrollView on which there are lots of buttons which should scroll left and right. The UIScrollView and buttons can show normally. But I cannot scroll the buttons. Could someone give me some suggestions? Thanks a lot!


#import <UIKit/UIKit.h>

@interface MZMPhotoCalenderSwitcher : UIView <UIScrollViewDelegate>

@property (strong, nonatomic) UIScrollView *topSwitcher;



- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
self.topSwitcher = [[UIScrollView alloc] initWithFrame:CGRectMake(0, LABEL_HEIGHT + VIEW_Y, self.view.bounds.size.width, TOP_SWITCHER_HEIGHT)];
self.topSwitcher.backgroundColor = [UIColor greenColor];
self.topSwitcher.pagingEnabled = YES;
self.topSwitcher.showsHorizontalScrollIndicator = NO;
self.topSwitcher.showsVerticalScrollIndicator = NO;

[self add:3 ButtonsOnView:self.topSwitcher withButtonWidth:44.8f andHeight:20.0f];

- (void)add:(int)num ButtonsOnView:(UIScrollView *)view withButtonWidth:(CGFloat)width andHeight:(CGFloat)height
CGFloat totalTopSwitcherWidth = num * width;
[view setContentSize:CGSizeMake(totalTopSwitcherWidth, view.bounds.size.height)];
CGFloat xOffset = 0.0f;

for (int i=1; i<=num; i++)
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(xOffset, 0, width, height)];
xOffset += width;
[button setTitle:[NSString stringWithFormat:@"%d", i] forState:UIControlStateNormal];

button.titleLabel.font = [UIFont systemFontOfSize:10];
[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateSelected];
[button setTag:i];
[button addTarget:self action:@selector(buttonEvent) forControlEvents:UIControlEventTouchUpInside];

if (i % 2 == 0)
[button setBackgroundColor:[UIColor yellowColor]];
[button setBackgroundColor:[UIColor redColor]];

[view addSubview:button];

Answer Source

Below following line

[view addSubview:button];


view.contentSize = CGSizeMake(view.contentSize.width, button.frame.origin.y + button.frame.size.height);

This will set content size of scroll view to the bottom of your button.