gpt4 book ai didi

ios - 调整自定义 UITableViewCell 及其 subview 的大小

转载 作者:行者123 更新时间:2023-12-01 16:54:18 25 4
gpt4 key购买 nike

我已经使用 XIB 文件创建了自定义 UITableViewCell 并让它在 UITableView 中工作。我设计了自定义单元格,它是纵向尺寸的 subview ,但是当我在风景模式下旋转设备时,我想调整单元格的大小,它是 subview 。我为此编写了以下代码,但不确定为什么可见单元格中只有一个单元格被调整大小而其余部分保持不变!有人可以帮助我调整自定义单元格及其 subview 大小的标准做法吗?谢谢。

#pragma mark - UITableView delegate methods

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CustomTableViewCellIdentifier";
CustomTableViewCell *cell = (CustomTableViewCell*)[tv dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
// Load custom cell from NIB
self.customTableViewCell = [[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil] objectAtIndex:0];
cell = _customTableViewCell;
}
// Use cell
...
}

#pragma mark - Layout views

- (void)layoutForOrientation:(UIInterfaceOrientation)orientation {
if (UIInterfaceOrientationIsPortrait(orientation))
[self layoutPortraitViews];
else
[self layoutLandscapViews];
}

- (void)layoutLandscapViews {
self.customTableViewCell.frame = CGRectMake(0, 0, 1024, 40);
self.customTableViewCell.contentSize = CGSizeMake(1024, 40);
self.customTableViewCell.cellBackgroundImageView.frame = CGRectMake(0, 0, 1024, 40);
self.customTableViewCell.assetNameLabel.frame = CGRectMake(15, 0, 245, 20);
self.customTableViewCell.assetTypeLabel.frame = CGRectMake(15, 20, 245, 20);
self.customTableViewCell.assetImageView.frame = CGRectMake(265, 20, 120, 20);
self.customTableViewCell.assetValueLabel.frame = CGRectMake(265, 20, 120, 20);

[self.tableView reloadData];
}

- (void)layoutPortraitViews {
self.customTableViewCell.frame = CGRectMake(0, 0, 768, 40);
self.customTableViewCell.contentSize = CGSizeMake(768, 40);
self.customTableViewCell.cellBackgroundImageView.frame = CGRectMake(0, 0, 768, 40);
self.customTableViewCell.assetNameLabel.frame = CGRectMake(15, 0, 180, 20);
self.customTableViewCell.assetTypeLabel.frame = CGRectMake(15, 20, 180, 20);
self.customTableViewCell.assetImageView.frame = CGRectMake(200, 20, 90, 20);
self.customTableViewCell.assetValueLabel.frame = CGRectMake(200, 20, 90, 20);

[self.tableView reloadData];
}

[解决方案]

经过一番挣扎后,这项工作得到了解决。更改单元格的大小及其 subview 不起作用,因为我必须处理方向更改,继续重复使用单元格以提高性能,并且当您旋转设备时可见单元格会发生变化,因此无法使用我的第一种方法找出解决方案。这是我的另一个解决方案。

这里的挑战是在不影响性能的情况下同时处理方向和自定义单元格。

我在 NIB 中创建了两个单元格 View ,一个用于纵向,另一个用于横向。

使用了两个变量;
BOOL refreshing;
UIInterfaceOrientation currentOrientation;

从 View 将出现;
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
currentOrientation = [UIApplication sharedApplication].statusBarOrientation;
[self layoutForOrientation:[UIApplication sharedApplication].statusBarOrientation];
}

来自轮换代表;
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
refreshing = YES;
currentOrientation = toInterfaceOrientation;
[UIView animateWithDuration:duration animations:^{
[self.tableView reloadData];
[self layoutForOrientation:toInterfaceOrientation];
}];
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
refreshing = NO;
}

来自 tableview 委托(delegate);
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CustomTableViewCellIdentifier";
CustomTableViewCell *cell = (CustomTableViewCell*)[tv dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil || refreshing)
{
if (UIInterfaceOrientationIsPortrait(currentOrientation))
cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil] objectAtIndex:0];
else
cell = [[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil] objectAtIndex:1];
}

//Use cell
}

...因此,此解决方案仅在发生方向更改事件时才会重新加载单元格。快乐编码:-)

最佳答案

调整自定义 NIB xib 单元格的大小可能会或可能不会在旋转时提供所需的 UI。为了使任务更容易..创建两个 UITableViewCell Nib

 if (!cell) {
if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell-Landscape" owner:self options:nil];
}else {
[[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell" owner:self options:nil];
}
}

进一步调用 [tableView reloadData];关于方向变化

关于ios - 调整自定义 UITableViewCell 及其 subview 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13194592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com