我有UITableView
个自定义单元格及其对应的.xib。
我的CustomCell.h有3个属性。我希望能够以编程方式指定这些属性的宽度,而无需使用自动布局。这三个属性是标题视图中的背景图像,标题视图和标题。我想将所有三个属性的with设置为与cell.contentView宽度相同。
我已将[cell setNeedsLayout]
放在cellForRowAtIndexPath
中,但唯一可更新的属性是CustomCellOne中的ImageView
和titleView
。标签的内容不会更新。除了不更新标签宽度这一事实外,我对这个“解决方案”的一个问题是,当显示单元格时,我可以看到背景图像宽度更新。背景图像从320宽度开始并扩展到375宽度。我希望在显示单元格之前执行layoutSubviews
。
我也尝试将[cell setNeedsLayout]
置于willDisplayCell
内,但它会产生与上述相同的行为。
我还在CustomCellOne.m的[self setNeedsLayout]
方法中尝试了awakeFromNib
,但也产生了与上述相同的结果。
此自定义单元格需要能够考虑不同iPhone尺寸的尺寸,[ImageManager]会返回特定设备的相应背景图像。
如果我选择单元格,那么layoutSubviews
将根据我的要求进行更新。有没有办法以编程方式触发单元格的选择?这不是一个更好的解决方案,因为它是一个黑客,我确信有更好的方法,正确的方式,做我想要的。
我将永远为谁能帮助我解决这个问题。我的代码如下。
// My ListViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.bounds = [self.view frame];
self.view.backgroundColor = [UIColor colorWithRed:0.882f green:0.902f blue:0.922f alpha:1.00f];
[self setNeedsStatusBarAppearanceUpdate];
// Setup the table view
self.tableView = [[UITableView alloc] initWithFrame:self.bounds style:UITableViewStylePlain];
self.tableView.backgroundColor = [UIColor clearColor];
self.tableView.separatorColor = [UIColor clearColor];
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.view addSubview:self.tableView];
// Setup the bar
self.myCustomBar = [[StyleOneBar alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(self.bounds), 100.0)];
SquareCashStyleBehaviorDefiner *behaviorDefiner = [[SquareCashStyleBehaviorDefiner alloc] init];
behaviorDefiner.elasticMaximumHeightAtTop = YES;
[behaviorDefiner addSnappingPositionProgress:0.0 forProgressRangeStart:0.0 end:0.5];
[behaviorDefiner addSnappingPositionProgress:1.0 forProgressRangeStart:0.5 end:1.0];
behaviorDefiner.snappingEnabled = YES;
self.myCustomBar.behaviorDefiner = behaviorDefiner;
[self.view addSubview:self.myCustomBar];
// Configure a separate UITableViewDelegate and UIScrollViewDelegate (optional)
self.delegateSplitter = [[BLKDelegateSplitter alloc] initWithFirstDelegate:behaviorDefiner secondDelegate:self];
self.tableView.delegate = (id<UITableViewDelegate>)self.delegateSplitter;
//[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
self.tableView.contentInset = UIEdgeInsetsMake(self.myCustomBar.maximumBarHeight, 0.0, 0.0, 0.0);
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
CustomCellOne *cell = (CustomCellOne *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell)
{
[tableView registerNib:[UINib nibWithNibName:@"CustomCellOne" bundle:nil] forCellReuseIdentifier:cellIdentifier];
cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
}
NSString *imageName = [NSString stringWithFormat:@"sunbathing%@", [ImageManager getCollectionImagePartialName]];
[cell.ivCategory setImage:[UIImage imageNamed:imageName]];
[cell.lblTitle setText:@"Lazy Beach Day"];
cell.titleView.frame = CGRectMake(0, 0, CGRectGetWidth(cell.contentView.bounds), 29);
return cell;
}
我的自定义单元格.h文件
// CustomCellOne.h
#import <UIKit/UIKit.h>
@interface EventCellOne : UITableViewCell
@property (strong, nonatomic) IBOutlet UIImageView *ivCategory;
@property (retain, nonatomic) IBOutlet UIView *titleView;
@property (weak, nonatomic) IBOutlet UILabel *lblTitle;
@end
我的自定义单元格.m文件
#import "CustomCellOne.h"
#import "ImageManager.h"
@implementation EventCellOne
- (void)awakeFromNib
{
// Initialization code
[super awakeFromNib];
self.contentView.backgroundColor = [UIColor clear];
[self setNeedsLayout];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (void)layoutSubviews
{
[super layoutSubviews];
//self.bounds = self.contentView.bounds;
[ImageManager getCollectionImageHeight]);
CGRect imageViewBounds = CGRectMake(0, 0, [ImageManager getImageMaxWidth], [ImageManager getCollectionImageHeight]);
[self.ivCategory setFrame:imageViewBounds];
self.titleView.frame = CGRectMake(0, 0, CGRectGetWidth(self.contentView.bounds), 29);
self.titleView.backgroundColor = [UIColor redColor];
self.lblTitle.frame = CGRectMake(3, 4, CGRectGetWidth(self.contentView.bounds)-6, 21);
[self.lblTitle setBackgroundColor:[UIColor lightGrayColor]];
}
答案 0 :(得分:0)
找到解决方案。我不得不取消选中&#34;使用自动布局&#34;在IB中为自定义单元格.xib。我的自定义单元格.m文件只有layoutSubviews。不需要采用直接的方法。
感谢@ user3654258的帮助。