【问题标题】:How to scroll a UIScrollView horizontally based on the buttons frame size inside the UIScrollview如何根据 UIScrollview 内的按钮框架大小水平滚动 UIScrollView
【发布时间】:2014-01-04 06:47:36
【问题描述】:

最初我需要在scrollView 上添加一个默认按钮。
然后,如果我在 scrollView 上再添加一个按钮,则第一个默认按钮应该向左移动。
我正在使用此代码:

int x = 0;

for (int i = 0; i < pullscount ; i++) {
    NSString *myString = [pullsarray objectAtIndex:i];
    CGSize stringsize = [myString sizeWithFont:[UIFont systemFontOfSize:16]];

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(x, 5, 100, 40)];
    [button setTitle:[pullsarray objectAtIndex:i] forState:UIControlStateNormal];
    [button setFont:[UIFont fontWithName:@"SegoeWP-Semibold" size:15.0]];
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [button addTarget:self
               action:@selector(buttonAction:)
     forControlEvents:UIControlEventTouchUpInside];

    [button setTag:190+i];

    [topScrollView addSubview:button];

    x += button.frame.size.width+30;
}

NSLog(@"%d",x);

topScrollView.contentSize = CGSizeMake(x+200, topScrollView.frame.size.height);
topScrollView.backgroundColor = [UIColor clearColor];

在scrollViewDidScroll委托方法中:

NSLog(@"%f",button.frame.size.width);    
CGFloat pageWidth = button.frame.size.width;
NSLog(@"%f",pageWidth);

if (topScrollView.contentSize.width>pageWidth) {
    float stopx = 100.0f;

    if (topScrollView.contentSize.width >= stopx) {
        CGPoint stop = topScrollView.contentOffset;

        NSLog(@"Value – %@", NSStringFromCGPoint(stop));

        stop.x = stopx;
        [topScrollView setContentOffset:stop animated:YES];
    }   
}
else if (topScrollView.contentOffset.x >= 110.0f && topScrollView.contentOffset.x <= 220.0f) {
        float stopx = 210.0f;
        CGPoint stop1 = topScrollView.contentOffset;
        stop1.x = stopx;
        [topScrollView setContentOffset:stop1 animated:YES];
        topScrollView.contentOffset = stop1;
    }
}

我的要求是我想在tableViews `headerView 中滚动UIButtons。
因此,我采用了scrollView 并动态放置了UIButtons。

当我水平滚动scrollView 时,它必须根据按钮的宽度水平移动。

当我滚动时,我还需要在滚动视图的某个点突出显示按钮标题。

【问题讨论】:

  • 你想要的 gajendra 在 scrrolview 上添加水平滚动并删除垂直滚动
  • 我的要求是我想滚动 uitableheader 视图上的 uibuttons。为此,我采用了我动态放置的 uibuttons 滚动视图。当我水平滚动滚动视图时,它必须根据按钮宽度水平移动。当我滚动时,我需要在滚动视图的某个点突出显示按钮标题...
  • 所以,基本上...你想要 1.scrollView 中的许多按钮(水平放置)2. 水平滚动 3. 所有这些都是UITableView 的headerView 4. 突出显示/加粗按钮标题。 对吗?
  • 如何根据按钮文本宽度水平移动滚动视图..
  • 你为什么要在scrollViewDidScroll:做这些事?还有,你到底想要什么。抱歉,我没听懂。

标签: ios cocoa-touch uiscrollview uibutton frame


【解决方案1】:

如果您只是想将scrollView 滚动 100 像素宽度,请检查以下场景:

- (void)viewDidLoad {
    //...
    UIButton *btnGoRight = [UIButton buttonWithType:UIButtonTypeRoundedRect];\
    [btnGoRight setTitle:@"Scroll Right" forState:UIControlStateNormal];
    [btnGoRight addTarget:self 
                   action:@selector(scrollMyScrollView)
         forControlEvents:UIControlEventTouchUpInside];

    [btnGoRight setFrame:CGRectMake(0, 0, self.view.frame.size.width, 30)];
    [self.view addSubview:btnGoRight];
}

- (void)scrollMyScrollView {
    if((topScrollView.contentOffset.x + topScrollView.frame.size.width) <= topScrollView.contentSize.width) {
        CGPoint tempContentOffset = topScrollView.contentOffset;
        tempContentOffset.x += 100;  //to go right

        [topScrollView setContentOffset: tempContentOffset animated:YES];
    }
}

向左走:

使用另一个按钮(例如,*btnGoLeft)和这个条件语句:

if((topScrollView.contentOffset.x + topScrollView.frame.size.width) >= 100) {
    //...
    tempContentOffset.x -= 100;  //to go left
    //...
}

基本上,我们创建了 2 个按钮(scrollView 之外),它们的任务是简单地将 scrollView 向右/向左滚动 100 像素。
这是基本概念,您可以在此基础上获得所需的内容


PS:您的问题含糊不清(至少对我而言),并且不清楚您打算如何滚动(滑动或单击按钮或其他内容)或您将(大致)有多少个按钮scrollView 所以...您正在尝试做的事情似乎有多种情况。
因此,我写了这篇……不是为了完整回答你的问题,而是希望能帮助你走上正轨。

【讨论】:

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