UIScrollView中的UIView不出现

Posted

技术标签:

【中文标题】UIScrollView中的UIView不出现【英文标题】:UIView in UIScrollView does not appear 【发布时间】:2011-02-27 07:03:10 【问题描述】:

我正在尝试创建一个类似于this video 的水平滚动菜单。

由于某种原因,在将一堆UIButtons 添加到UIView 并将其添加到UIScrollView 后,它不会出现。这是我的代码(在UIViewController 的子类的-viewDidLoad 中调用):

//set up scrollview
UIScrollView *designPicker = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 431, 320, 49)];

//set up a view to drop into the scroll view
UIView * buttonsView = [[UIView alloc] initWithFrame:CGRectMake(0, 431, 640, 49)];

//add buttons to scrollview
// load all the images from our bundle and add them to the scroll view
NSUInteger i;
float runningX = designPicker.frame.origin.x;
for (i = 1; i <= 10; i++)

    UIButton *tempBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [tempBtn setBackgroundImage:[UIImage imageNamed:@"button.png"] forState:UIControlStateNormal];
    CGRect rect = CGRectMake(runningX, designPicker.frame.origin.y, 30.0, 30.0);
    tempBtn.frame = rect;
    [buttonsView addSubview:tempBtn];
    runningX = runningX + 35;
    [tempBtn release];


[designPicker setContentSize:buttonsView.frame.size];
[designPicker addSubview:buttonsView];
[self.view addSubview:designPicker];

【问题讨论】:

【参考方案1】:

您不应使用UIScrollView 的框架添加按钮。框架的原点位于超级视图(UIScrollView 的超级视图)坐标中。您应该使按钮的框架相对于UIView。因此,如果您希望按钮出现在应该从 (0,0) 开始的视图顶部。

【讨论】:

感谢 Diederik 的回复。问题是按钮的框架是相对于 UIView 的,因为 UIScrollView 是视图的子视图。所以,按钮的框架是相对于 UIScrollView 的 superview 的。也许我错过了什么?谢谢!【参考方案2】:

不要将滚动视图作为子视图添加到您的视图中,而是将视图添加为滚动视图的子视图。作为-

[self.scrollView addSubview:self.view];
// release scrollView as self.view retains it
self.view=self.scrollView;
[self.scrollView release];

并确保您的视图的内容大小应大于滚动视图的内容大小。它对我有用。

【讨论】:

以上是关于UIScrollView中的UIView不出现的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollView 内的 UIView 上绘制草图

为啥我在 UIScrollView 中的 UIView 不滚动?

自定义 UIView 中的 UIScrollView 不滚动

UIView 不遵守 UIScrollView 中的自动布局约束

UIScrollView 中的 UIView 尊重一些约束,但不尊重其他约束

尽管添加了自动布局约束,但 UIScrollView 不滚动