0

기본 뷰 컨트롤러 위에 팝업의 내부에 이미지, 레이블, 텍스트 및 단추가 비례 적으로 채워진 스택보기를 구현했습니다. 내가 popover에 segue 할 때 뷰는 ProfileImage를 높이의 1/2로 지정하여 이미지가 원으로 나타나도록 이미지의 코너 반경을 정의하는 오버라이드로 나타납니다.StackView 내의 하위 뷰 속성을 장치 회전 후 다시 계산할 때 비례 적으로 채우기로 설정하는 방법

I 장치를 회전하면 스택이 다시 계산되어 profileImage의 크기가 변경됩니다. 뷰를 전환 할 때 원이되도록 코너 반경을 조정하려면 아래 코드를 사용하려고했습니다. 이 코드는 완료 블록과 alongsideTransition 블록에서 모두 시도했습니다.

장치를 회전 할 때 코너 반경은 NEW 방향이 아닌 OLD 방향의 이미지 크기로 설정됩니다. 마치 새로운 방향으로의 전환이 일어나는 것처럼 느껴지고 스택이 스스로 재 계산되는 것처럼 느껴집니다. 이 경우 코너 반경이 업데이트되기 전에 나타납니다. 장치가 회전하고 스택이 새로운 방향을 기반으로 이미지 크기를 다시 계산 한 후 새 뷰의 높이가 될 이미지 높이 속성을 호출하는 방법을 이해하는 데 도움을 드리고자합니다.

제공 할 수있는 지침을 제공해 주셔서 감사합니다. 문제의 코드는 아래를 참조하십시오

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    coordinator.animate(alongsideTransition: { context in 
     context.viewController(forKey: UITransitionContextViewControllerKey.from) 
    }, completion: {(context) -> Void in 
     self.view.layoutSubviews() 
     self.ProfileImage.layer.cornerRadius = self.ProfileImage.bounds.size.height/2 
     print(self.ProfileImage.frame.size.height) 
    }) 
} 

답변

0

가까이 있지만 완벽하지입니다 UIStack보기가 파단을 낳는 때문에) viewWillTransition (대신의) viewWillLayoutSubviews (의 모서리 반경을 설정하는 것입니다 대답을 그 동안 회전하지 않은 후에

override func viewWillLayoutSubviews() { 
    self.ProfileImage.layer.cornerRadius = self.ProfileImage.frame.size.height/2 
} 

는 올바른 방향으로 날을 가리키는이 문서에 응답자에게 감사 : View frame changes between viewWillAppear: and viewDidAppear:


내 문제는 지금있는 UIImage보기의 어떻게 든 크기가 몇 픽셀로 변경한다는 것입니다 viewDidLayoutSubviews 호출 후. DidLayoutSubviews 후에 Stack View 또는 Autolayout이 다시 계산 될 때 호출 될 다른 함수가 있습니까?

앱이 정상적으로 보이지만 이해가되지 않는 다른 문제가 발생합니다.

관련 문제