2014-10-07 2 views
2

사용자 지정 UITableViewCell의 하위보기에 그림자를 추가하려고합니다. 하위보기는 셀의 보이는 배경으로 사용됩니다 (셀의 루트보기가 선명합니다).UITableViewCell의 autolayout 하위 뷰에 대한 프레임이 업데이트되지 않습니다.

xib를 사용하여 인터페이스 빌더에 셀을 배치합니다. 하위 뷰는 셀의 4 가장자리에 자동 레이아웃 제약 조건을 사용하여 배치됩니다.

너비가 다른 장치의 경우 하위보기 자체가 자동으로 자동 크기 조정되는 것처럼 보입니다. 스택 오버 플로우 연구에서 layoutSubviews 메서드에 프레임 의존 코드를 삽입해야한다고 생각했습니다. 나는 거기에 내 그림자 드로잉 코드를 삽입 :

layer.shadowPath = [[UIBezierPath bezierPathWithRoundedRect:subView.bounds cornerRadius:3.0]CGPath]; 

그림자는하지만 디버깅 후 뷰 프레임 사각형, 인터페이스 빌더에서 수정 가능한 일정 것으로 보인다 그것의 크기가 변경되기 전에 프레임의 크기에 나타납니다 (실제로 자동 레이아웃 뷰 컨트롤러의 경우 회색으로 표시됩니다 : @). 상기 디버깅 가입일

하위 뷰 프레임이 셀 뷰 프레임이 경우에도 업데이트되지 않은 것 같습니다.

layoutSubviewscalled, parent view frame size: 180 subview frame size: 148.000000 
layoutSubviewscalled, parent view frame size: 375 subview frame size: 148.000000 

이 A는 (이 layoutSubviews에서 뷰의 프레임의 폭이 인쇄를 수행 하였다) 곤충? 내가 놓친 게 있니? 이것을 견책하기 위해 무엇을 할 수 있습니까?

답변

0

in this answer에서 보았 듯이 UIBezierPath를 shadowPath로 삽입하기 전에 [self setNeedsLayout]을 호출해야합니다.

+0

답장을 보내 주셔서 대단히 감사합니다. 나는이 대답을하기 전에 갔지만 참을성있게는하지 않았다. 이것은 3 번째 layoutSubviews 호출에서만 작동하는 것으로 보입니다. 뷰를 업데이트 한 후에 그림자를 그릴 수있는 아이디어는 무엇입니까? –

+0

@SameerJJ가 나왔다. 자동 레이아웃에도 문제가 있었다. 내 View Controller에서 맞춤형 UIScrollView를 초기화하기 전에 'self.layoutIfNeeded()'를 호출한다. (Apple Documentation 상태에서 : _ 루트 뷰로 메시지를 받으면,이 메소드는 루트에서 시작하는 뷰 서브 트리를 배치합니다. _) [self setNeedsLayout]'다음에 [[self layoutIfNeeded]'? –

+0

참으로 나는 그것을 시도했지만 성공하지 못했다. 레이아웃이 마침내 올바른 프레임 크기를 반환하더라도 여전히 전반적으로 상당히 버그가있었습니다. 나는 정말로 애플이 여기에 올라서서 autolayout을 덜 고통스럽게 만들어야한다고 생각한다. 이 셀에 대한 프로그래밍 방식의 뷰 레이아웃으로 되돌아갔습니다. 도움을 주셔서 감사합니다 –

관련 문제