2016-11-24 2 views
1

사용자가 사용할 수있는 모든 다른 HomeKit 장치를 나열하는 UITableView이 있습니다.(Swift) 동적 인 TableViewCells에서 UITableView의 높이를 변경하려면 어떻게 설정해야합니까?

분명히 얼마나 많은 장치가 있는지 알 수있는 방법이 없으므로 스토리 보드 변경시 높이가 UITableView's 일 필요가 있습니다.

나는 내가 viewDidLoad() 함수를 호출하는이, 시도했다 : 나는있는 tableview에서 일부 UI 요소를하려고

func adjustHeightOfTableView() { 

    //getting the height of the tableview 
    var tableHeight = self.tableView.contentSize.height 

    //the height of the content inside the view 
    var maxHeight = self.tableView.superview?.frame.size.height 


    //if the height of the content is bigger then the height of the tableview 
    if (maxHeight! > tableHeight) { 

     tableHeight = maxHeight! 
     //set the tableview height to be the content height 

    } 

    //trying to reload the tableview height? 
    self.view.layoutIfNeeded() 
    self.tableView.reloadData() 

} 

을, 그리고 나는 그들이 바닥에서 집합 공간이되고 싶어 tableview뿐만 아니라 테이블 뷰를 가지고 있어야 할 셀의 높이가되어야합니다.

하지만 작동하지 않습니다. 내가 잘못했거나 누군가이 작업을하는 방법을 알고 있다면 알려주십시오. 감사합니다. 당신이보기 didload에 autolayouts

를 사용하는 경우

+0

화면에 셀 수가 적고 빈 셀을 표시하는 경우 tableView의 높이를 줄이시겠습니까? –

+0

'tableHeight = maxHeight!'는 tableView 높이를 설정하지 않고 변수의 값만을 설정합니다. tableView 자체의 프레임을 수정해야합니다. 예 :'self.tableView.frame = CGRectMake (...)' –

+2

왜 높이를 변경하고 싶습니까? 점은 무엇인가? 테이블의 맨 아래에있는 공백을 없애기 위해서? 대신 왜 그 색을 투명하게 만들까요? 아니면 다른 UI 요소를 그 공간을 차지하도록 옮기고 싶습니까? –

답변

1

당신이 자동 치수를 사용할 수 있습니다

let nib = UINib(nibName: "YOURCELLNIB", bundle: nil) 
     tableView.registerNib(nib, forCellReuseIdentifier: "REUSEIDENTIFIER") 
     tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 140 

코드에서 기능

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) 
0

을 제거, 당신은 :

tableHeight = maxHeight! 
    //set the tableview height to be the content height 

그러나 이것은 테이블 높이를 변경하지 않습니다 - 이전 테이블 내용 높이 값으로 이전에 할당 된 일부 변수 만 변경합니다. 코드에서 테이블 높이를 변경하는 데 아무 것도하지 않습니다.

테이블 높이를 직접 변경하는 방법 중 하나는 프레임의 높이를 제외하고 이전 프레임의 값으로 완전히 새로운 프레임을 할당하는 것입니다.

은 (당신이 필요로하는 어떤 다른 논리 추가) 같은 것을보십시오 :

oldFrame = self.tableView.frame 
newHeight = rowCount * rowHeight 
self.tableView.frame = CGRectMake(oldFrame.origin.x, oldFrame.origin.y, oldFrame.size.width, newHeight) 
2

참고 : 당신이 무슨 손 전에 총을 알 수있는 방법을 정적 셀 높이가 있거나 파악하기 위해 필요한이 방법의 경우 contentsize 높이

당신이 당신의 UITableView에 제약을 다음과 생성, 제약 조건을 사용하는 가정 (선행 및 후행에서 떨어져!)

은 높이 제약 위스콘신 추가 750의 우선 순위와 >= 0을하고 (1000)의 우선 순위는 이제 UIViewController

에서 만든이 높이 제한을위한 콘센트를 작성해야합니다 귀하의 슈퍼 볼에 0의 바닥 간격 제약, 토륨

func adjustHeightOfTableView() { 

    //set the height to be equal to the number of elements multiplied by the height of each cell. 
//or use some logic that allows you to know what content size or space the cells will occupy! 
    tableViewHeightConstraint.constant = dataArray.count * rowHeight  

    view.layoutIfNeeded() 
} 

UITableView 높이가 수퍼 뷰보다 작 으면 아무런 문제가 없습니다. 하지만 화면 경계보다 큰 경우 높이 제한을 깨고 전체 화면이되어 콘텐츠를 정상적으로 표시 할 때 UITableView으로 예상됩니다!

편집 : 당신은 당신이 무엇을 할 수 UIAutomaticRowDimensions를 사용하는 경우에도 귀하의 UITableView에 프로그래밍 방식으로 제약 조건을 추가 할 수 있습니다. 즉

물론 다른 모든보기에는 여전히 UITableView의 하단 제한이 적용됩니다. 정상적인 선행, 후행, 위 및 아래를 슈퍼보기로하여 스토리 보드에 UITableView을 만듭니다. 데이터를 가져옵니다. UITableView에 대한 contentSize를 가져온 다음 아래쪽 구속 조건을 제거하십시오. 이제 UIScreen.main().bounds.size.heightcontentSize의 최소값이 될 높이 제한 조건을 추가하십시오.

관련 문제