非常に単純な質問...
UItableViewで現在の行(クリックされた行)のみの高さを変更できますか?
注:残りの行のサイズに影響を与えたくありません。
はい、できます。最後に選択した行を保持する変数が必要です。例:
@property (nonatomic, assign) NSInteger selectedRow;
... 次に、メソッドを実装します
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == self.selectedRow) {
return 100.;
}
return 44.;
}
次に、メソッドを更新します。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if(self.selectedRow == indexPath.row)
self.selectedRow = -1;
else
self.selectedRow = indexPath.row;
//The magic that will call height for row and animate the change in the height
[tableView beginUpdates];
[tableView endUpdates];
}
注:デフォルトは であるため、最初にself.selectedRow
with-1
値を初期化します0
。
heightForRowAtIndexPath
行の高さの設定に使用できます
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
あなたはその特定のものをチェックしNSIndexPath
て返すことができますheight
indexpath
はい、できますが、選択した行のインデックスパスを保存する必要があり、selectedRow 変数を負の値で初期化する必要があります。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
selectedRow = indexpath.row;
[tblView reloadData];
}
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row == selectedRow)
return 150.0f;
return 30;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row == rowtochangeheight) {
return 60;
}
else
{
return 44;
}
}