신속한 UITableView set rowHeight
tableView
이 코드 를 사용하여의 각 행 의 높이를 해당 셀 의 높이로 설정하려고합니다 .
override func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath!) -> CGFloat {
var cell = tableView.cellForRowAtIndexPath(indexPath)
return cell.frame.height
}
초기화 할 때이 오류가 발생합니다 var cell
.
스레드 1 : EXC_BAD_ACCESS (code = 2, address = 0x306d2c)
행 높이를 설정하는 데는 별도의 방법이 있습니다.
대한 스위프트 3
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100.0;//Choose your custom row height
}
이전 Swift 사용
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 100.0;//Choose your custom row height
}
그렇지 않으면 다음을 사용하여 행 높이를 설정할 수 있습니다.
self.tableView.rowHeight = 44.0
에 있는 viewDidLoad .
또는에 기본값 rowHeight
을 입력 합니다. 마틴 R.에 의해 지적, 당신은 호출 할 수 없습니다 에서viewDidLoad
awakeFromNib
cellForRowAtIndexPath
heightForRowAtIndexPath
self.tableView.rowHeight = 44.0
yourTableView.rowHeight = UITableViewAutomaticDimension
이 시도.
주석에서 지적했듯이 cellForRowAtIndexPath
내부를 호출 할 수 없습니다 heightForRowAtIndexPath
.
할 수있는 일은 데이터를 채우는 데 사용되는 템플릿 셀을 만든 다음 높이를 계산하는 것입니다. 이 셀은 테이블 렌더링에 참여하지 않으며 각 테이블 셀의 높이를 계산하는 데 재사용 할 수 있습니다.
간단히 말해, 표시하려는 데이터로 템플릿 셀을 구성하고 내용에 따라 크기를 조정 한 다음 높이를 읽는 것으로 구성됩니다.
이 코드는 내가 작업중인 프로젝트에서 가져 왔습니다. 불행히도 Objective C에 있습니다. 신속하게 번역하는 데 문제가 없을 것 같습니다.
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
static PostCommentCell *sizingCell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sizingCell = [self.tblComments dequeueReusableCellWithIdentifier:POST_COMMENT_CELL_IDENTIFIER];
});
sizingCell.comment = self.comments[indexPath.row];
[sizingCell setNeedsLayout];
[sizingCell layoutIfNeeded];
CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height;
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
var height:CGFloat = CGFloat()
if indexPath.row == 1 {
height = 150
}
else {
height = 50
}
return height
}
Problem Cause:
The problem is that the cell has not been created yet. TableView first calculates the height for row and then populates the data for each row, so the rows array has not been created when heightForRow method gets called. So your app is trying to access a memory location which it does not have the permission to and therefor you get the EXC_BAD_ACCESS
message.
How to achieve self sizing TableViewCell
in UITableView
:
Just set proper constraints for your views contained in TableViewCell
's view in StoryBoard
. Remember you shouldn't set height constraints to TableViewCell's root view, its height should be properly computable by the height of its subviews -- This is like what you do to set proper constraints for UIScrollView
. This way your cells will get different heights according to their subviews. No additional action needed
Make sure Your TableView Delegate are working as well. if not then in your story board or in .xib press and hold Control + right click on tableView drag and Drop to your Current ViewController. swift 2.0
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 60.0;
}
Try code like this copy and paste in the class
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
ReferenceURL : https://stackoverflow.com/questions/25632394/swift-uitableview-set-rowheight
'IT박스' 카테고리의 다른 글
NSString이 null인지 감지하는 방법은 무엇입니까? (0) | 2021.01.09 |
---|---|
일반 텍스트 출력을위한 Python 기술 또는 간단한 템플릿 시스템 (0) | 2021.01.09 |
Android는 '? attr / selectableItemBackground'기호를 확인할 수 없습니다. (0) | 2021.01.09 |
catch가 실제로 아무것도 잡지 못하는 경우 (0) | 2021.01.09 |
Winforms에서 Combobox를 읽기 전용으로 만드는 방법 (0) | 2021.01.09 |