UIScrollView不会滚动

时间:2013-10-24 10:56:02

标签: ios iphone objective-c uiview uiscrollview

我遇到了有关UIScrollView的问题。我正在制作一个继承UIView的自定义视图。该视图有一个UIScrollView,其中有许多按钮可以向左和向右滚动。 UIScrollView和按钮可以正常显示。但我无法滚动按钮。有人可以给我一些建议吗?非常感谢!

MZMPhotoCalenderSwitcher.h

#import <UIKit/UIKit.h>

@interface MZMPhotoCalenderSwitcher : UIView <UIScrollViewDelegate>

@property (strong, nonatomic) UIScrollView *topSwitcher;

@end

MZMPhotoCalenderSwitcher.m

- (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]];
        else
            [button setBackgroundColor:[UIColor redColor]];

        [view addSubview:button];
    }
}

10 个答案:

答案 0 :(得分:5)

以下行

[view addSubview:button];

添加

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

这会将滚动视图的内容大小设置为按钮的底部。

答案 1 :(得分:1)

应该是内容大小问题,还要检查UIScrollView对象的scrollEnabled属性是否设置为TRUE,

检查UIScrollView won't scroll!

的解决方案

答案 2 :(得分:1)

只需在项目中禁用“自动布局”,它就会开始工作!

答案 3 :(得分:1)

将所有这些建议合并为一个简单的答案:

//在viewDidLoad

// set the size of the scrollview (in this case I made it the size of its container
self.scrollView.frame = self.view.frame;
// now set the size of the content to be scrolled within the scrollview
// the content to be displayed must be bigger than the scrollView
// in this case I added 100 to make the content size, so that it is taller than the height of the scrollView
// now it scrolls
    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width, self.scrollView.frame.size.height + 100);

答案 4 :(得分:0)

你在SuperVIew上添加ScrollView的位置?你在哪里重新计算scrollView的内容大小属性?

[view setContentSize:CGSizeMake(<summYourViews.width>,<summYourViews.height>)];

答案 5 :(得分:0)

您的问题是您没有设置contentSize,因此,contentSize与帧视图相同。

您需要在viewDidLoad

中执行此操作
- (void)viewDidLoad {
    ........
    self.scrollView.contentSize = CGSizeMake(/*yourWidth*/, /*yourHeight/*);
    ........
}

尝试将contentSize调整到对象的最后位置加上其大小加上填充。

答案 6 :(得分:0)

您必须设置scrollview框架大小和内容大小。

答案 7 :(得分:0)

试试这个。 。 。 。

- (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;
    [topSwitcher setContentSize:CGPointMake(self.view.bounds.size.width,TOP_SWITCHER_HEIGHT+400)];

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

答案 8 :(得分:0)

太棒了。

我只是将viewDidLoad中的代码移动到initWithFrame:,然后就可以了。我不知道为什么会这样?

答案 9 :(得分:0)

我现在正在使用Xcode 6 / iOS 8+并启用了自动布局,我首先遇到了同样的问题,删除自动布局根本不起作用,所以为了制作滚动视图垂直滚动,我确定了以下内容:

  1. 滚动视图内容大小高度必须大于屏幕 身高,这几乎不用说......

  2. 滚动视图的上/下/左/右约束是必须的     固定,我使用故事板这样做,所以没有代码显示在这里

  3. 如果要使滚动视图水平滚动,请确保其内容大小宽度大于屏幕宽度,另一个规则也适用。

    这对我有用,希望它可以帮助别人。