iOS 7 — navigationController가 UIScrollView의 contentInset 및 ContentOffset을 설정합니다.
UIScrollView가 있습니다 (실제로는 UICollectionView이지만 아마도 중요하지 않습니다). IOS 7에 표시되면 내비게이션 컨트롤러는 contentInset 및 contentOffset을 원하지 않는 값으로 설정합니다. 상태 표시 줄과 탐색 표시 줄을 조정하려는 것 같습니다. 나는 그것이 그들을 내버려 두는 것을 매우 선호합니다. 이 문제를 해결하려면 contentInset 및 contentOffset에 대한 getter 및 setter 메서드를 개체에 집합을 허용할지 여부를 알려주는 플래그를 사용하여 재정의했습니다. 그러나 더 나은 방법이 있습니까?
self.automaticallyAdjustsScrollViewInsets = NO메인 뷰 컨트롤러에서 설정해보세요 .
이 기능이 도입 iOS 7되었으므로 지원하는 경우 iOS 버전 확인으로 래핑 할 수 iOS 6있습니다.
최신 정보
스토리 보드를 사용하는 경우 'Adjust Scroll View Insets'선택한 컨트롤러를 확인 하는 것 뿐만 아니라 인터페이스 빌더에서도이를 수행 할 수 있습니다 .

비슷한 문제가 발생하여 viewController를 닫은 후 tableView의 contentOffset이 (0, -64)로 변경되었습니다.
내 솔루션은 약간 이상했습니다. 다른 모든 답변을 시도했지만 성공하지 못했습니다. 내 문제를 해결 한 유일한 방법은 .xib의 컨트롤 트리에서 tableView 위치를 전환하는 것입니다.
다음과 같은 상위 뷰의 첫 번째 컨트롤입니다.

ImageView 바로 뒤에 tableView를 옮겼고 작동했습니다.

테이블 뷰를 첫 번째 위치에 놓는 것이 문제를 일으키는 것으로 보이며 테이블 뷰를 다른 위치로 이동하면 문제가 해결되었습니다.
PD 나는 autoLayout도 스토리 보드를 사용하지 않는다
이것이 누군가를 도울 수 있기를 바랍니다!
두 가지 해결책이 있습니다.
1.
self.view = scrollView;
2.
[self.navigationController.toolbar setTranslucent:NO];
나는 같은 문제가 있습니다.
설정
self.automaticallyAdjustsScrollViewInsets = NO은 일부보기에 대한 문제를 해결했지만 모든 곳이 아닙니다.두 번째 해결책은 viewWillLayoutSubviews에서 tableview / view / scrollview의 콘텐츠 오프셋을 설정하는 것입니다.
- (void)viewWillLayoutSubviews { //Arrange the view CGRect tempViewFrame = self.view.frame; if (tempViewFrame.origin.y == 64.0f) { tempViewFrame.origin.y = 0; self.view.frame = tempViewFrame; } }
이것으로 충분합니다
- (void)viewDidLoad {
[super viewDidLoad];
self.automaticallyAdjustsScrollViewInsets = NO;
다음과 같은 경우 두 경우 모두 문제가 해결됩니다.
- 상태 표시 줄 표시
상태 표시 줄 + 탐색 표시 줄 표시
override func viewDidLayoutSubviews() { NSLog("ORIGIN: \(self.view.frame.origin.y)") if self.view.frame.origin.y == 0 { if let rect = self.navigationController?.navigationBar.frame { let y = rect.size.height + rect.origin.y self.tableView.contentInset = UIEdgeInsetsMake(y, 0, 0, 0) } } else if self.view.frame.origin.y == 44 || self.view.frame.origin.y == 64 { self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) } }
다른 답변은 당신에게 효과가 있을지 모르지만 나에게는 효과가 없었습니다. 나를 위해 일한 y것은 contentOffsetin viewDidLayoutSubviews및 의 속성 을 수동으로 설정하는 것이 었습니다 viewWillAppear.
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Set the offset to go below the status bar
collectionView.contentOffset.y = -UIApplication.shared.statusBarFrame.height
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Set the offset to go below the status bar
collectionView.contentOffset.y = -UIApplication.shared.statusBarFrame.height
}
제 경우에는 컨트롤러가 자식 컬렉션 뷰를 가지고 있었는데,이 뷰는 때때로 contentOffset조정되고 다른 때는 그렇지 않습니다. 내가 정규화 한 방식은 매번 수동으로 조정하는 것이 었습니다. 콘텐츠가 상태 표시 줄 아래로 오프셋되기를 원했기 때문에 상태 표시 줄 높이를 값으로 사용했습니다 (콘텐츠를 아래로 내리길 원하기 때문에 음수).
'IT TIP' 카테고리의 다른 글
| 상황에 맞는 메뉴로 Bootstrap 3 드롭 다운 메뉴 사용 (0) | 2020.11.02 |
|---|---|
| CSS에서 텍스트의 마지막 줄을 중앙 정렬하는 방법은 무엇입니까? (0) | 2020.11.02 |
| css 절대 위치는 margin-left : auto margin-right : auto와 함께 작동하지 않습니다. (0) | 2020.11.02 |
| Android에서 URL이 유효한지 확인하는 방법 (0) | 2020.11.02 |
| Keras의 HDF5 파일에서 모델을로드하는 방법은 무엇입니까? (0) | 2020.11.02 |