둥근 테두리가있는 셀이있는 정적 테이블보기가 있습니다. 서로 다른 시뮬레이터에서 테스트 할 때 자동 레이아웃 제약 조건이 작동하는 동안 경계가 항상 올바른 폭이 아닌 것으로 나타났습니다. 이 특정 화면에는 UIView
이 포함 된보기 컨트롤러가 포함되어 있습니다. tableViewController
viewDidAppear에서 UI 만 올바르게 구성 할 수 있습니까? 그리고 viewWillAppear/viewDidLoad 아닌가요?
일부 조사를 수행했는데 실제로 테두리의 너비가 스토리 보드 전화의 너비에 달려 있음을 알았습니다. 즉, iPhone 8의 스토리 보드가있는 경우 8+에 셀이 너무 짧거나 그 반대의 경우 8+ 스토리 보드의 결과가 8보다 길고 (화면에서 벗어난) 셀에 표시됩니다.
현재 나는 viewDidAppear
내에서이 코드를 실행하면
- (void)configureCellThree {
//Add Border
CALayer *borderLayer = [CALayer layer];
CGRect borderFrame = CGRectMake(0, 0, (_contentCellThree.frame.size.width), (_contentCellThree.frame.size.height));
[borderLayer setBackgroundColor:[[UIColor clearColor] CGColor]];
[borderLayer setFrame:borderFrame];
[borderLayer setCornerRadius:_contentCellThree.frame.size.height/2];
[borderLayer setBorderWidth:1.0];
[borderLayer setBorderColor:[kTextColor2 CGColor]];
// [borderLayer setOpacity:0.5];
[_contentCellThree.layer addSublayer:borderLayer];
}
지금, 모든 것이 두 장치에서 작동합니다 : 내가있는 viewDidLoad에서 셀 테두리를 설정하고, 여기에 내가 셀 경계를 구성하는 데 사용하고있는 코드입니다. 내 메인보기 컨트롤러에 몇 가지 로그를 추가하여 상황이 설정되는 방식을 확인했습니다.
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"VDL - SELF.VIEW = %@", self.view);
NSLog(@"VDL - CONTAINER VIEW = %@", self.profileScrollingContainerView);
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"VDA- SELF.VIEW = %@", self.view);
NSLog(@"VDA - CONTAINER VIEW = %@", self.profileScrollingContainerView);
}
내가있는 viewDidLoad가 스토리 보드 대신 (오른쪽하지 않는 것) 뷰 자체의 크기 정보를 이용 것을 의심했다. 이 기록은 이것을 확인합니다. UIView
이 내 테이블 뷰 표시를 담당하는 경우 스토리 보드를 8 이상으로 설정하면 프레임 속성이 X = 0, Y = 349, W = 414, H = 338
이됩니다. 이제 로깅 결과를 살펴 보겠습니다.
VDL - SELF.VIEW = <UIView: 0x7fa545401f10; frame = (0 0; 375 667);
VDL - CONTAINER VIEW = <UIView: 0x7fa545401b50; frame = (0 349; 414 338);
VDA- SELF.VIEW = <UIView: 0x7fa545401f10; frame = (0 64; 375 603);
VDA - CONTAINER VIEW = <UIView: 0x7fa545401b50; frame = (0 285; 375 269);
따라서 뷰가로드되면 뷰 뷰에 잘못된 뷰 크기 정보가 표시됩니다. viewDidAppear
이 호출되면보기의 크기가 올바르게 지정되고 제대로 작동합니다. 내 문제는 내 viewDidAppear에서 initialising 코드를 호출하고 싶지 않다는 것입니다.
I read here that I should be putting my UI Geometry code into the viewWillAppear
그러나 나는 이것을 시도했지만 동일한 문제가 발생합니다.
VWA - CONTAINER VIEW = <UIView: 0x7fec04d97700; frame = (0 349; 414 338);
그래서 내 질문을 통합, 어떻게 내가 설정 내 UI 올바르게 /보기 전에 내보기의 속성을로드 할 수 있도록 등장받을 수 있나요?
UIView
의 하위 클래스를 사용해야하고 잠재적으로 setFrame
을 사용해야한다는 것을 읽었지 만 실제로이 작업을 실제로 수행하는 방법을 실제로 알지 못합니다.