나는 아이폰 OS (11) 시뮬레이터 내부 JSQMessageViewController
의 신속한 예를 시도했다. 다음은 결과입니다 : 내가 안전 영역 여백을 사용하고 도구 모음의 제약 조건을 수정 시도 screenshotjsqmessageviewcontroller의 ios11 도구 모음
하지만 차이는 아직 없다. 툴바가 UIWindow (UITextEffectsWindow) 외부에있는 것 같습니다. 어떤 해결책이 있습니까?
나는 아이폰 OS (11) 시뮬레이터 내부 JSQMessageViewController
의 신속한 예를 시도했다. 다음은 결과입니다 : 내가 안전 영역 여백을 사용하고 도구 모음의 제약 조건을 수정 시도 screenshotjsqmessageviewcontroller의 ios11 도구 모음
하지만 차이는 아직 없다. 툴바가 UIWindow (UITextEffectsWindow) 외부에있는 것 같습니다. 어떤 해결책이 있습니까?
얘들 아 나는 그것을 알아 낸! JSQMessagesInputToolbar.m에 다음 코드를 입력하기 만하면됩니다. 입력 도구 모음이 자체 창에 배치 된 것 같습니다. 별도로 창에 액세스해야합니다.
-(void) didMoveToWindow{
[super didMoveToWindow];
if (@available(iOS 11.0, *)) {
[[self bottomAnchor] constraintLessThanOrEqualToSystemSpacingBelowAnchor:self.window.safeAreaLayoutGuide.bottomAnchor multiplier:1.0].active = YES;
}
}
당신은 window.safeAreaLayoutGuide에 대해 확인해야합니다. nil coz가 아닙니다. 위의 코드를 사용하면 앱이 닫히고 화면을 닫으므로 조건을 추가하면 nil이 건너 뛸지 검사 할 수 있습니다. –
같은 문제가 있습니다. JSQMessageViewController를 안전한 영역이 설정된 viewController의 자식 뷰로 추가하여이를 해결하려고합니다.
존재 MyJSQMessageViewController JSQMessagesViewController의 서브 클래스 :
self.myJSQMessageViewController = [[MyJSQMessageViewController alloc] init];
[self addChildViewController:self.myJSQMessageViewController];
[self.view addSubview:self.myJSQMessageViewController.view];
[self.myJSQMessageViewController didMoveToParentViewController:self];
if (@available(iOS 11.0, *)) {
self.myJSQMessageViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
[NSLayoutConstraint activateConstraints:@[ [self.myJSQMessageViewController.view.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor], [self.myJSQMessageViewController.view.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor], [self.myJSQMessageViewController.view.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor], [self.myJSQMessageViewController.view.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor] ]];
}
적합하지 솔루션 그러나 적어도 당신이 iOS11 안전 영역 내부의 입력 도구 모음을해야합니다 ... 나쁜 소식은 늘 비 안전 영역에 표시 할 것을 입력 도구 모음입니다 그래서 그래픽으로 늘
입력 textview가 첫 번째 응답자가 될 때 collectionView도 조금 아래로 스크롤합니까? –
아니요. 알아 차릴 수 없습니다. (물론 나는 에뮬레이터를 테스트했다.) https://imgur.com/PqLx0Mq에서 작은 비디오를 볼 수있다 –
이 답변은 JSQMessagesVie을 기반으로합니다 (이미지 참조) 기본 도구 모음처럼 wController 버전 7.3.
참고 : 아래 코드에는 컴파일러 경고를 피하기위한 지저분한 pragma 지시문이 포함되어 있습니다. 코드 자체는 실제로 pragma를 넘어서면 아주 간단합니다.
이 여전히 소프트웨어 키보드가 제시 할 때 도구 모음을 이동할 수 있도록하면서 문제를 해결할 것으로 보인다. 내 JSQMessagesViewController 서브 클래스에 다음 코드를 추가 :
- (void)viewDidLoad {
[...]
// To keep the toolbar inside the safe area on iPhone X, we need to install a new constraint that has higher priority than the one
// JSQMessagesViewController manipulates when adjusting for the keyboard. The `toolbarBottomLayoutGuide` is a private property in our
// superclass, so it's not straightforward to access it...
if (@available(iOS 11.0, *)) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
NSLayoutConstraint *constraint = [self performSelector:@selector(toolbarBottomLayoutGuide)];
#pragma clang diagnostic pop
constraint.priority = 999;
[self.inputToolbar.bottomAnchor constraintLessThanOrEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor].active = YES;
}
편집 : 스위프트 사용자의는 다음과 같은 트릭을 사용하면 개인 objc 메소드를 호출하도록해야 : 코드 :
let constraint = perform(Selector(("toolbarBottomLayoutGuide"))).takeUnretainedValue() as! NSLayoutConstraint
constraint.priority = 999
편집 이 새 제약 조건이 추가 된 후에는 collectionView의 contentInset을 조정하는 컨트롤이 호출되지 않으므로 채팅보기에 화면에 맞는 것보다 많은 메시지가 포함되어 있으면 마지막 메시지 거품이 입력 도구 모음에 의해 가려집니다. 나는 viewDidAppear viewDidLayoutSubviews에 다음 코드를 추가하여 업데이트 인 세트를 보장함으로써이 문제를 해결 :
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
[self performSelector:@selector(jsq_updateCollectionViewInsets)];
#pragma clang diagnostic pop
어디에서'toolbarBottomLayoutGuide'를 얻을 수 있는지 이해할 수 없다 ... – Tulleb
toolbarBottomLayoutGuide는 JSQMessagesViewController에 정의되어있다. 나는 서브 클래 싱 중입니다. 그것은 .m 파일에 정의되어있어 구현에서 볼 수 없기 때문에 performSelector를 사용하고 pragma 지시문을 추가하는 이유입니다. –
우리는 다른 가지에 대해 이야기하고 있다고 생각합니다. 나는 JSQ로부터 최신'개발 '커밋을 위해 노력 중이다. [제거 된 것으로 보입니다.] (https://imgur.com/Cj8q6sk) – Tulleb
나는 최신 develop
분기 커밋 JSQ에 따라 고정 포크를 제안하고있다.
그것은 didMoveToWindow
용액을 사용한다. 이상적이 아니지만 inputAccessoryView
의 안전 영역 레이아웃 가이드 첨부 파일 또는 다른 개선 사항에 대한 Apple의 답변을 기다리는 동안 시도해 볼 가치는 없습니다.
당신은 이전 JSQ 라인을 대체하여 Podfile이를 추가 할 수 있습니다
pod 'JSQMessagesViewController', :git => 'https://github.com/Tulleb/JSQMessagesViewController.git', :branch => 'develop', :inhibit_warnings => true
미안하지만, 당신이 모든을 통해 달성하려고하는 무엇을 요구하는지 매우 분명하지 않다? –
스크린 샷에서 볼 수 있듯이 키보드는 안전 영역 가이드를 따르지 않고 iphone X 자극기 하단에 있습니다. –
JSQ의 버그 일 가능성이 있습니다. 알고 계시 겠지만, 더 이상 사용되지 않습니다. 그것을 대체하기위한 노력은 https://github.com/MessageKit/MessageKit에서 계속됩니다. –