가능한 한 빨리하려고 노력할 것입니다. 키가 0 인 컨테이너가있는 기본보기가 있고 키보드가 활성화 될 때마다 컨테이너를 키보드의 높이와 같게 설정하고 버튼과 전자 메일 필드가 있고 기본적으로이 컨테이너에 제약 조건을 설정했습니다. 요소를 밀어. 뷰를로드 할 때 키보드를 활성화하고 주 뷰로 작업 할 수 있도록 설정했지만 단추를 눌러 다음보기로 이동하면 키보드가 열리지 만 단추와 전자 메일 필드는 키보드 뒤에 있습니다. 제약 조건이 작동하지 않기 때문에,하지만 홈 버튼을 누르고 배경이 아닌 앱을 닫고 다시 열면 제약 조건이 정상적으로 작동합니다. 이것은 메인 뷰에 내비게이션 컨트롤러를 내장 할 때만 발생합니다. 그렇지 않으면 완벽하게 작동합니다. 어떤 아이디어?내비게이션 컨트롤러와 작동하지 않는 제약
두보기 모두에서 똑같은 코드가 있습니다. Ps : 긴 게시물에 대해 유감스럽게 생각합니다. 어떻게 설명해야할지 모르겠습니다.
@IBOutlet weak var emailTF: UITextField!
@IBOutlet weak var bottomHeight: NSLayoutConstraint!`
override func viewWillAppear(_ animated: Bool)
{
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil
)
// Show keyboard by default
emailTF.becomeFirstResponder()
}
@objc func keyboardWillShow(_ notification: Notification)
{
if let userInfo = notification.userInfo
{
if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue
{
bottomHeight.constant = keyboardSize.height
view.setNeedsLayout()
}
}
}
업데이트 : 문제의 일부를 발견했습니다. 두 번째보기를로드 할 때 키보드 높이를 가져올 수 없었기 때문에 두 번째보기 코드를 "viewWillAppear"에서 "viewDidAppear"로 변경하여 컨테이너를 키보드 높이와 같게했지만 다른 문제가 있습니다. 첫 번째보기를로드 할 때 키보드 높이가 271 (올바른 값)인데 두 번째보기로 이동하면 키보드 높이가 226이므로 텍스트 필드가 45로 이동합니다. 뒤로 버튼을 사용하여 secondView에서 첫 번째로 돌아가려면 키보드 높이가 226입니다. 홈 버튼을 누른 후 앱을 다시 열면 어떤 화면인지 알 수 없지만 올바른 높이 인 271의 키보드 높이를 얻습니다 . 내가 뭘 잘못하고 있니?
업데이트 2 : 해결되었습니다.
내 코드가 내비게이션 컨트롤러없이 작동했기 때문에 빠른 애니메이션과 내비게이션 컨트롤러로 전환 한 느낌이 들었고로드하기 전에 코드를 읽을 수 없으므로이 코드를 작성하려고했습니다. 코드 행 emailTF.resignFirstResponder()
내 버튼 동작으로 작동했습니다! 그래서 기본적으로 다음보기에서 키보드를로드하기 전에 키보드를 닫아야했습니다. 나는 같은 문제를 가진 몇몇 사용자들을 도왔 으면 좋겠다.
이미 문제를 발견하고 게시물을 업데이트했습니다. 당신은 scrollView 언급했지만 내 경우에는 하나의 요소를 이동하고 scrollView를 사용하여 일을 복잡하게하려는 경우 작동 할 것입니다. 도움을 주셔서 감사합니다! –
@ AlexandreD'Acol 항상 스크롤 뷰로보기를 바꾸고 위의 재사용 가능한 코드를 추가하는 것이 더 쉬웠다 고 생각했습니다. 당신이 그것을 고쳤다 니 반가워! 프로젝트를 잘 돌보고 행운을 빈다. – RLoniello
그것에 대해 잘 알고, 나는이 방법을 사용한 적이 없지만 확실히 시도 할 것입니다. 감사 ! –