programing

스 와이프하여 셀을 삭제하면 tableViewHeader가 셀과 함께 이동합니다.

projobs 2021. 1. 15. 07:30
반응형

스 와이프하여 셀을 삭제하면 tableViewHeader가 셀과 함께 이동합니다.


iOS 8 tableViewHeader에서 my UITableView에서 이상한 버그가 발생했습니다 . 셀을 스 와이프하여 삭제 버튼 (표준 iOS 스 와이프하여 삭제)을 표시하면 스 와이프 tableViewHeader중인 셀과 함께 이동합니다 . 셀을 스 와이프하면 헤더가 스 와이프되는 셀과 동일한 방식으로 이동합니다. 테이블보기의 다른 셀은 이동되지 않으며 머리글과 스 와이프되는 셀만 이동됩니다. iOS 7에서 이것을 테스트했지만 문제가 발생하지 않았습니다. 나에게 이것은 tableViewHeaderiOS 8 의 버그처럼 보입니다 .이 버전에서만 발생하고 절대 발생해서는 안되는 것 같습니다. 헤더가 스 와이프하여 삭제에 포함될 이유가 없습니다.

아래는 모형입니다. 앱 내에서 스 와이프하여 삭제는 기본 iOS이며 사용자 지정은 없습니다.

아래는 모형입니다.  앱 내에서 스 와이프하여 삭제는 기본 iOS이며 사용자 지정은 없습니다.


ferris의 답변을 바탕으로 UITableViewCell을 섹션 헤더로 사용할 때 가장 쉬운 방법은 viewForHeaderInSection에서 셀의 contentView를 반환하는 것입니다. 코드는 다음과 같습니다.

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let  cell : cellSectionHeader = tableView.dequeueReusableCellWithIdentifier("SectionHeader") as cellSectionHeader
    return cell.contentView
    //cellSectionHeader is my subclassed UITableViewCell
}

이것은 UITableViewCell을 테이블의 헤더로 사용했기 때문에 발생했습니다. 스 와이프 문제를 해결하기 위해를 사용하는 대신 tableView.tableHeaderView = cell다음을 사용합니다.

UIView *cellView = [[UIView alloc] init];
[cellView addSubview:cell];
tableView.tableHeaderView = cellView

왜 이것이 문제를 해결하는지 모르겠습니다. 특히 iOS 7에서 작동했기 때문에 문제가 해결되는 것 같습니다.

모든 뷰를 cell view에 추가해야합니다. 그렇지 않으면 버튼이 반응하지 않습니다.

공장:

[cell addSubview:view]; 또는 [self addSubview:view];

작동하지 않음 :

[cell.contentView addSubview:view] 또는 [self.contentView addSubview:view]


The way to avoid the headers moving with the cells is to return the contentView of the cell in viewForHeaderInSection. If you have a subclassed UITableViewCell named SectionHeaderTableViewCell, this is the correct code:

-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    SectionHeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SectionHeader"];
    //Do stuff to configure your cell
    return cell.contentView; 
}

SWIFT 3.0 Tested solution. As mentioned in the first example for Objective-C; the key point is returning cell.contentView instead of cell So new format syntax is as below.

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

    // HeaderCell is the name of custom row designed in Storyboard->tableview->cell prototype
    let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell")

    cell.songLabel.text = "Your Section Name"
    return cell.contentView
}

Try implementing this method and give proper conditions for checking the swipe.If this method get called for header view.

1.tableView:editingStyleForRowAtIndexPath: 2.tableView:titleForDeleteConfirmationButtonForRowAtIndexPath: 3.tableView:shouldIndentWhileEditingRowAtIndexPath:


.contentView 메서드에서 언급되지 않은 한 가지 문제는 테이블 뷰 셀이 layoutSubviews를 사용하는 경우 원하는 동작을 얻지 못할 수 있다는 것입니다. layoutSubviews가 호출되지 않기 때문입니다. 결국 일반 셀 작업과 헤더 작업을 모두 지원하는 완전히 별도의 UIView 하위 클래스를 만들고이를 사용하는 최소한의 UITableView 셀 클래스를 만들었습니다.


Victor의 배경색 손실 문제는 Brad의 답변에 다음과 같이 추가하여 해결됩니다.

cell.backgroundColor = UIColor.cyanColor()

에:

cell.contentView.backgroundColor = UIColor.cyanColor()

참조 URL : https://stackoverflow.com/questions/26009722/swipe-to-delete-cell-causes-tableviewheader-to-move-with-cell

반응형