0

我正在尝试在我的应用程序中实现自定义 UITableViewCells。我想向每个 UITableViewCell 添加一个带有多个子视图的 UIScrollView 并启用水平滚动。除了高度和分组外,我几乎都能做到。在下面查看我的代码和屏幕截图。我无法将 UIScrollView 的高度更改为大于 44 点的数字。

如何将高度大于 44 的 UIScrollView 添加到我的自定义 UITableViewCell?

#import "HomeViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 2;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Home Scroll Cell";
    homeScrollCell *cell =[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (!cell) {
        cell = [[homeScrollCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }


    NSLog(@"Cell: %f", cell.bounds.size.height);




    return cell;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 100.0;
}

@end

UITableCell 类

#import "homeScrollCell.h"

@implementation homeScrollCell

//- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
//{
//
//}

-(id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self)
    {
        scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, 100)];
        NSInteger viewcount= 3;
        for(int i = 0; i< viewcount; i++) {

            CGFloat x = i * self.bounds.size.width;
            HomeTodayView *view = [[HomeTodayView alloc] initWithFrame:CGRectMake(x, 0,self.bounds.size.width, self .bounds.size.height)];
            view.backgroundColor = [UIColor greenColor];

            [scrollView addSubview:view];

        }
        scrollView.contentSize = CGSizeMake(self.bounds.size.width *viewcount, 100);
        scrollView.pagingEnabled = YES;
        scrollView.bounces = NO;
        [self addSubview:scrollView];


        NSLog(@"Height: %f", self.bounds.size.height);
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
  //  [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

结果

4

4 回答 4

1

将 UIScrollView 的框架设置为 tableViewCell 的边界(或框架,我从来不记得我的头顶):

scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];

然后将它的高度设置为 autoResize

scrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight;

您不必在实际单元格中手动更改单元格的高度。高度都应该在 TableViewController 的委托方法中进行管理。

于 2013-07-24T14:29:42.157 回答
0

您没有设置单元格的框架

您是否尝试过检查初始化 HomeTodayView 的行,self.bounds.size.height 的返回值是多少?

也许您可以使用另一个参数为您的单元格创建另一个初始化程序 - 框架?像这样开始:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier frame:(CGRect)frame
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.frame = frame;

        /* rest of the init method you already have goes here */

基本上,只需添加 self.frame = frame; 在“如果”的开头。

于 2013-07-24T13:57:36.987 回答
0

UItableViewcell 的初始大小是 44.0f 你调用后检查它

self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

你需要让你的 scrollView 高度可拉伸。

scrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight;

它对我有帮助。

于 2013-07-24T13:58:09.157 回答
0

只需使用

        CGFloat x = i * self.bounds.size.width;
        HomeTodayView *view = [[HomeTodayView alloc] initWithFrame:CGRectMake(x, 0,self.bounds.size.width, scrollView.bounds.size.height)];
        view.backgroundColor = [UIColor greenColor];

或将您的整个代码替换为

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width,self.bounds.size.height)];
        [scrollView setAutoresizingMask:UIViewAutoresizingFlexibleHeight];
        NSInteger viewcount= 3;

        for(int i = 0; i< viewcount; i++)
        {
            CGFloat x = i * self.bounds.size.width;

            HomeTodayView *view = [[HomeTodayView alloc] initWithFrame:CGRectMake(x, 0,self.bounds.size.width,scrollView.bounds.size.height)];
            view.backgroundColor = [UIColor greenColor];

            [scrollView addSubview:view];
        }

        scrollView.contentSize = CGSizeMake(self.bounds.size.width *viewcount, 100);
        scrollView.pagingEnabled = YES;
        scrollView.bounces = NO;
        [self addSubview:scrollView];


        // Initialization code
    }
    return self;
}

即使您不明白问题出在哪里,请查看以下几行

你的问题来了

scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, 100)];

您将 scrollView 高度设置为常量值,因此当 HeightForRowAtIndex 路径调整单元格的高度时,scrollView 不会调整大小。

并且设置[scrollView setAutoresizingMask:UIViewAutoresizingFlexibleHeight];将允许 scrollView 在其容器调整大小时调整大小,并允许调整其内容的大小。

检查这个演示

于 2013-07-24T14:07:19.603 回答