如何在 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】:这是一个简单的答案,但如果你采取任何Mainview
或subview
或其他,工作正常,
将frame size/2
设置为height
和width
它会自动将其设置为subview
的center
。
这里我用的是静态颜色,自己自定义
只要改行就行了
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 中为视图高度设置动画?
在 UIScrollView 中为 zoomScale 设置动画时不需要的滚动