2016-09-12 5 views
3

내가있는 UITableViewCell 내부 라운드에 UIView (MYVIEW를) 만들있는 UITableViewCell - 경계가 제대로 아이폰 OS에 설정하면 10

내가 그렇게 그렇게 func awakeFromNib()를 사용하던 아이폰 OS 10 이전 :

class MyCell: UITableViewCell { 

@IBOutlet var myView: UIView! 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     print(myView.bounds.height) 
     myView.layer.cornerRadius = myView.bounds.height/2 
     myView.layer.masksToBounds = true 
    } 
} 

myView height와 with는 내 스토리 보드의 AutoLayout 제약 조건을 통해 으로 설정됩니다.

그러나 print(myView.bounds.height)1000.0 콘솔에 표시하십시오. 모서리 반경 명령으로 반경을 및 myView으로 완전히 설정합니다.

iOS 10의 수명주기가 UITableViewCell입니까? iOS 10에서 view.bounds 설정이 변경되는 기능입니까? iOS 10에서보기 높이의 절반에 cornerRadius을 어떻게 설정합니까?

Here is a minimal projet to reproduce the issue

내가 내 UITableViewController에 추가해야 내가 원하는에 가까운 결과가하려면 ...

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    tableView.reloadData() 
} 

을하지만 난이 최적이 아닌 아주 확신

답변

0

서브 뷰의 경계를 물을 때 같은 크기의 1000.0과 똑같은 문제가 발생했습니다. 프레임 또는 경계로

값은 내 스토리 보드에 정의 된 높이 제한 조건에 대해 함께 IBOutlet을 선언하고 내 서브 뷰의 모서리 반경을 설정하는 데 사용했다 더 이상 신뢰할 수 없습니다.

class MyCell: UITableViewCell { 

@IBOutlet var myView: UIView! 
@IBOutlet var myViewHeightConstraint: NSLayoutConstraint! 

    override func awakeFromNib() { 
     super.awakeFromNib() 

     print(myView.bounds.height) 
     myView.layer.cornerRadius = myViewHeightConstraint.constant/2 
     myView.layer.masksToBounds = true 
     } 
} 

이렇게하면 reloadData 전화를 제거 할 수 있습니다.

+0

예이 솔루션도 사용합니다. 작동하지만 ... 아직 해결되지 않습니다./ –

+1

종류는 있습니다. 그러나 어떤 종류의 재 로딩이나 중계도 필요하지 않으므로 가장 효율적입니다. 비용이 많이들 수 있습니다. – Sparga

3

나는 동일한 문제가있어서 그것을 고치는 두 가지 방법을 발견했다. 두 레이아웃 파단에 셀을 적용

최초의 솔루션 :

override func awakeFromNib() { 
    super.awakeFromNib() 
    self.setNeedsLayout() 
    self.layoutIfNeeded() 
} 

두 번째 방법 :

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 
     cell.setNeedsLayout() 
     cell.layoutIfNeeded() 
return cell 
} 
0

내 관찰/TVOS 10 아이폰 OS (10)가 호출하기 전에 자동 레이아웃을 기반으로 뷰를 배치되지 않는 것입니다 awakeFromNib와 같은 메서드를 호출하기 전에 자동 크기 조정 마스크를 사용하여 뷰를 레이아웃합니다.

스토리 보드에서 자동 레이아웃 제약 조건을 제거하고 새로운 자동 크기 설정을 사용하면 해결되었습니다. 나 여기에

Autoresizing settings

마스크를 자동 크기 이상 자동 레이아웃 덜 신뢰할 수 있습니다. 필자는 Autolayout에서 전환 한 후에도 성능이 향상되었다고 느낍니다. 나는 확실히 말할 수 없다. 비록 내가 TVOS에 있고 Core Animation instrument가 TVOS에서 작동하지 않기 때문이다.