【问题标题】:UIScrollView not scrolling horizontally with dynamic UIButtonsUIScrollView 不使用动态 UIButtons 水平滚动
【发布时间】:2014-09-14 13:36:42
【问题描述】:

我正在创建一个customview,它是UIScrollView 的子类。我在UIScrollView 中动态添加UIButtons 以及图像和动作。但是scrollview 没有使用按钮水平滚动。我知道这个话题在 SO 上讨论过很多次。我尝试了在 SO 上发布的所有帖子,但没有得到预期的结果。任何关于我哪里出错的建议都会有所帮助。

MyCustomView.h

@interface MyCustomView : UIScrollView

@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
+ (id)customView;

@end

MyCustomView.m

@implementation MyCustomView
@synthesize scrollView;

+ (id)customView
{
    MyCustomView *customView = [[[NSBundle mainBundle]  loadNibNamed:@"MyCustomView" owner:nil options:nil] lastObject];


    if ([customView isKindOfClass:[MyCustomView class]])
        return customView;
    else
        return nil;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {

    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    [self setupHorizontalScrollView];
}

- (void)setupHorizontalScrollView
{
    //scrollView.delegate = self;

    [self.scrollView setBackgroundColor:[UIColor blueColor]];
    [scrollView setCanCancelContentTouches:YES];

    scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    scrollView.clipsToBounds = NO;
    scrollView.scrollEnabled = YES;
    //scrollView.pagingEnabled = YES;

    CGFloat cx = 0;
    NSArray *buttons = @[@{@"Tag":@1,@"Image":[UIImage imageNamed:@"borderImage1.png"]},
                         @{@"Tag":@2,@"Image":[UIImage imageNamed:@"borderImage2.png"]},
                         @{@"Tag":@3,@"Image":[UIImage imageNamed:@"borderImage3.png"]},
                         @{@"Tag":@4,@"Image":[UIImage imageNamed:@"borderImage4.png"]},
                         @{@"Tag":@1,@"Image":[UIImage imageNamed:@"borderImage1.png"]},
                         @{@"Tag":@2,@"Image":[UIImage imageNamed:@"borderImage2.png"]},
                         @{@"Tag":@3,@"Image":[UIImage imageNamed:@"borderImage3.png"]},
                         @{@"Tag":@4,@"Image":[UIImage imageNamed:@"borderImage4.png"]},
                         @{@"Tag":@1,@"Image":[UIImage imageNamed:@"borderImage1.png"]}
                         ];

    // CGRect frame = CGRectMake(0.0f, 0.0f, 50.0f, 30.0f);
    for (NSDictionary *dict in buttons)
    {
        UIButton *button =[UIButton buttonWithType:UIButtonTypeRoundedRect];
        CGRect rect = button.frame;
        rect.size.height = 40;
        rect.size.width = 40;
        rect.origin.x = cx;
        rect.origin.y = 0;

        button.frame = rect;
        button.tag = [dict[@"Tag"] integerValue];
        [button setImage:dict[@"Image"]
                forState:UIControlStateNormal];
      //  [button addTarget:self action:@selector(buttonAction:)
      //   forControlEvents:UIControlEventTouchUpInside];

        [self.scrollView addSubview:button];
        //frame.origin.x+=frame.size.width+20.0f;
        cx += button.frame.size.width+5;
    }

    [scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
}
@end      

我浏览了下面的 SO 链接,但没有得到解决方案。

LINK1LINK2LINK3LINK4

【问题讨论】:

  • scrollView 属性是你的scrollView 中的另一个scrollView 还是不是真的需要对self 的引用?
  • 打印“CX”值看看,你会得到什么......

标签: ios objective-c ios7 uiscrollview uibutton


【解决方案1】:

为了能够滚动,您需要在滚动视图上保留一个超出屏幕边界的视图。因此,拖动一个视图并将其放大到设备边界之外,以便它能够容纳您的子视图。

【讨论】:

    【解决方案2】:

    这种问题最好使用 UICollectionView。它更容易实现,也将帮助您完成所有必要的操作。

    【讨论】:

      【解决方案3】:

      您的MyCustomViewUIScrollView 的子类。因此,您无需将 UIScrollView 属性添加到您的课程中。删除scrollView属性并将所有self.scrollView替换为self

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-19
        • 1970-01-01
        • 2012-03-15
        • 1970-01-01
        • 2015-11-18
        相关资源
        最近更新 更多