如何在 ios 中为 UIScrollView 设置对齐方式

Posted

技术标签:

【中文标题】如何在 ios 中为 UIScrollView 设置对齐方式【英文标题】:How to set alignment for UIScrollView in ios 【发布时间】:2014-09-18 13:03:05 【问题描述】:

我正在创建一个应用程序,我在其中使用 UIScrollView 来显示每种产品的可用颜色数量。我在运行时获得了可用颜色的数量,所以我使用了 for 循环并在我的滚动视图上显示。它工作正常,但如果我只得到一种可用颜色,那么我的输出将如下屏幕所示:

但输出应该如下屏幕:

似乎我需要为我的 UIScrollView 进行某种中心对齐,因此每种可用颜色都假设从中心显示。这是我的代码:

UIScrollView *availableColorScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 80)];
availableColorScrollView.backgroundColor = [UIColor clearColor];
availableColorScrollView.showsHorizontalScrollIndicator = YES;
availableColorScrollView.showsVerticalScrollIndicator=NO;
availableColorScrollView.pagingEnabled = YES;

for (int i = 0; i < arrayAvlbleColors.count; i++) 
    CGRect frame;
    frame.origin.x = 23 * i;
    frame.origin.y = 0;
    frame.size = availableColorScrollView.frame.size;
    UIView *subview = [[UIView alloc] initWithFrame:frame];

    UILabel *label = [[UILabel alloc] init];
    [label setFrame:CGRectMake(15, 14, 16, 16)];
    [label.layer setCornerRadius:8];

    NSString *strColorCode = [arrayAvlbleColors objectAtIndex:i];
    strColorCode = [strColorCode substringFromIndex:1];
    [label setBackgroundColor:[self colorWithHexString:strColorCode]];
    [subview addSubview:label];
    [availableColorScrollView addSubview:subview];


 [self.view addSubview:availableColorScrollView];

availableColorScrollView.contentSize = CGSizeMake(24 * arrayAvlbleColors.count, availableColorScrollView.frame.size.height);

请建议我实现我的输出,谢谢!

【问题讨论】:

你必须实现你自己的逻辑。这在技术上是不可能的。 我没有得到我的问题的逻辑,这就是我问这个的原因..你能告诉我这个逻辑应该是什么,我们可以为scrollView设置偏移量吗? 【参考方案1】:

这是一个简单的答案,但如果你采取任何Mainviewsubview 或其他,工作正常, 将frame size/2 设置为heightwidth 它会自动将其设置为subviewcenter

这里我用的是静态颜色,自己自定义

只要改行就行了

 NSString *strColorCode = [arrayAvlbleColors objectAtIndex:i];
strColorCode = [strColorCode substringFromIndex:1];
[label setBackgroundColor:[self colorWithHexString:strColorCode]];
[subview addSubview:label];
[availableColorScrollView addSubview:subview];

进入

    NSString *strColorCode = [arrayAvlbleColors objectAtIndex:i];
     strColorCode = [strColorCode substringFromIndex:1];
    [label setBackgroundColor:[self colorWithHexString:strColorCode]];

    //use any one

    //option no 1:

    //[label setCenter:subview.center];

     //option no 2:

    [ label setCenter:CGPointMake(subview.frame.size.width / 2, subview.frame.size.height / 2)];


    [subview addSubview:label];
    [availableColorScrollView addSubview:subview];

最终输出是

【讨论】:

【参考方案2】:

您可以像这样计算要放置在中心的滚动视图内容:

float contentWidth = 23 * arrayAvlbleColors.count;

现在您可以从 scrollView 的宽度中减去内容宽度

float centerPadding = 0.0f;
float width = availableColorScrollView.frame.size.width;
centerPadding = width - contentWidth;
if(centerPadding < 0)

   //content cannot be placed in center as content is bigger than width
   centerPadding = 0.0f;

我们有 padding 来让我们的内容在 scrollView 中居中,所以像这样在 for 循环中使用它:

frame.origin.x = (23 * i) + centerPadding;

【讨论】:

感谢@Prince 给我回复。我已经应用了你的代码,但我也没有得到任何颜色。你想让我在这里发布我的代码吗..?

以上是关于如何在 ios 中为 UIScrollView 设置对齐方式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中使用 UIImageview 添加 UIScrollview 的页面控件

如何使用自动布局在 UIScrollView 中为视图高度设置动画?

iOS UIScrollView捏缩放添加空白

在 UIScrollView 中为 zoomScale 设置动画时不需要的滚动

在 UIScrollview 中为 UIButton 添加 UIPangesture 以在所有视图上移动

iOS:如何在 UIScrollView 中显示长文本?