UIView setBounds UIScrollView地狱!

时间:2010-06-29 23:48:16

标签: iphone objective-c uiview uiscrollview

我想在垂直滚动视图中添加一些'rowviews'。我已将此rowView视图创建为IB中的单独nib。它们的大小为1024/200(ipad)。现在我想在我的父UIScrollView中逐个放置它们。我尝试了一个简单的[vScroll addSubview:rowView]但是这使得它们彼此重叠(我使rowview透明以检查这一点)。所以我开始愚弄每个rowview的界限无济于事。这是我的代码。注意'self.yExtentSoFar'初始化为0.想象一下为每一行调用下面的代码:

            MyRowView *rowView = [[MyRowView alloc] init];

    float calculatedWidth = 0;
    // minus nav bar
    float calculatedHeight = 0;
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    UIInterfaceOrientation orientation = [UIDevice currentDevice].orientation;
    if (orientation == UIInterfaceOrientationPortrait){
        // iPad
        calculatedWidth =  768.0;
        calculatedHeight = 960.0;
    }else{
        // iPad
        calculatedWidth =  1024.0;
        calculatedHeight = 704.0;
    }

    [self.vScroll addSubview: rowView.view];
    [rowView.view setBounds:CGRectMake(0, self.yExtentSoFar, calculatedWidth,200)];
    [self.vScroll setContentSize:CGSizeMake(calculatedWidth, yExtentSoFar+200)];
    self.yExtentSoFar += 200;

所以在我尝试设置边界之前,rowviews显得彼此叠加。我猜是可以理解的。当我设置边界时,第二行视图没有像预期的那样出现在第一行下面,而是我必须下拉vScroll而第二个已经出现在第一个关闭屏幕上面了!

有人能指出我出错的地方吗?非常感谢,

麦克

2 个答案:

答案 0 :(得分:3)

您希望通过设置frame

来布置子视图

具体而言,你会混淆参考坐标。界限是指该视图的显示量。而框架是视图放置在其超视图中的位置(和大小)。

请参阅“框架,边界和中心的关系”View Programming Guide for iPhone

答案 1 :(得分:2)

你做错了;-)你在这里解释的或多或少是使用UITableView重新实现的。 Use a UITableView和自定义表格视图单元格。它会让你的生活更轻松