contentInset 후 UITableView가 스크롤되지 않음

Loadex

나는 tableview와 uitextfield가있는 프로젝트에서 일하고 있습니다.

uitextfield가 포커스를 얻거나 잃을 때 다음 방법을 적용하고 있습니다.

-(void)enableInset {

CGFloat offSet = -30.0f;
UIEdgeInsets inset = UIEdgeInsetsMake(placesMapView.frame.size.height - offSet, 0.0f, 0.0f, 00.f);

// Updating the tableView position.
placesTableView.contentInset = inset;
placesTableView.contentOffset = CGPointMake(0.0f, -(placesMapView.frame.size.height - offSet));
placesTableView.scrollIndicatorInsets = inset;
}

- (void)disableInset {
CGFloat offset = self.navigationController.navigationBar.frame.size.height  + [UIApplication sharedApplication].statusBarFrame.size.height;
UIEdgeInsets inset = UIEdgeInsetsMake(offset, 0.0f, 0.0f, 00.f);
placesTableView.contentInset = inset;
placesTableView.contentOffset = CGPointMake(0.0f, -offset);
placesTableView.scrollIndicatorInsets = inset;
}

enableInset 메소드는 viewDidLayoutSubviews에서 호출됩니다. 그런 다음 disableInset 및 enableInset을 호출하면 UITableView를 더 이상 스크롤 할 수 없습니다.

내가 뭘 잘못 했어? 내가 어떤 대답을 찾을 수 있는지 아십니까?

편집 : 도움이된다면 github에 프로젝트를 추가했습니다.

https://github.com/Loadex/PlaceViewer

버그를 재현하려면 : 목록을 스크롤하고 검색 창을 탭한 다음 취소를 누르고 목록을 다시 스크롤 해보십시오.

이상하게 필터 버튼을 클릭하면 UIActionSheet가 닫히면 스크롤이 다시 작동합니다.

채소

문제에 대한 해결책을 찾는 동안 placesTableView의 contentInset 하단 부분이 다른 상태를 통해 계속 변경된다는 것을 알았습니다. 지도를 볼 수있는 초기 상태에서는 0이었고 tableView는 예상대로 작동했습니다. 검색 필드를 탭한 후 키보드가 나타나면 216으로 설정되었습니다. 나는 이것이 tableView와 키보드 (알림 또는 PlacesQueryTableViewController에서 한 작업을 통해) 간의 자동화 된 통신이라고 생각했습니다. 하단 삽입이 키보드가 나타날 때 상단으로 설정되기를 원하기 때문에 괜찮습니다. 자, 여기 버기 부분이 있습니다. 취소 버튼을 눌렀을 때 contentInset.bottom이 -216으로 설정되었습니다.

왜 이런 일이 발생하는지 설명 할 수 없지만 삽입의 자동 변경이 구현되는 방식과 관련이 있다고 생각합니다. 나는 그것이와 같은 tableView.contentInset.bottom -= heightOfKeyboard일을한다고 생각하며 아마 애니메이션이 끝나기 전이 아니라 끝날 때 일어날 것입니다. 문제의 원인은 애니메이션이 완료되기 전에 그리고 자동 변경이 발생하기 전에 contentInset의 하단을 변경한다는 것입니다. 따라서 사용자가 취소를 탭하자마자 하단을 0으로 설정합니다. 그런 다음 시스템이 들어 와서 키보드의 높이만큼 줄입니다. 216이됩니다. 이것이 제 생각에는 어쨌든 일어나고 있습니다.

이 문제를 해결하려면 contentInset의 하단 부분을 변경하지 말고 상단 부분 만 변경하십시오. placesTableView.contentInset.top읽기 전용이지만 아래 코드 에서처럼하면 문제를 해결할 수 있습니다. 각 메서드에서 삽입 된 코드와 관련된 두 줄의 코드를 변경했습니다. 내가 뭘했는지 보셨 길 바랍니다.

-(void)enableInset {
NSLog(@"Enabling insets");
// Setting the tableView to overlay the map view
CGFloat offSet = [placestableViewController tableView:placestableViewController.tableView heightForRowAtIndexPath:nil] - 30.0f;
UIEdgeInsets inset = placesTableView.contentInset; // UIEdgeInsetsMake(placesMapView.frame.size.height - offSet, 0.0f, 0.0f, 0.0f);
inset.top = placesMapView.frame.size.height - offSet;

// Updating the tableView position.
placesTableView.contentInset = inset;
placesTableView.contentOffset = CGPointMake(0.0f, -(placesMapView.frame.size.height - offSet));
placesTableView.scrollIndicatorInsets = inset;

placesMapView.hidden = NO;
[placestableViewController loadObjects];}


- (void)disableInset {
NSLog(@"Disable insets");
CGFloat offset = self.navigationController.navigationBar.frame.size.height  + [UIApplication sharedApplication].statusBarFrame.size.height;
UIEdgeInsets inset = placesTableView.contentInset;// UIEdgeInsetsMake(offset, 0.0f, 0.0f, 0.0f);
inset.top = offset;

placesTableView.contentInset = inset;
placesTableView.contentOffset = CGPointMake(0.0f, -offset);
placesTableView.scrollIndicatorInsets = inset;

// Hidding the map while in search
placesMapView.hidden = YES;}

.

BTW, 다른 상태에서 contentInset 값을 어떻게 찾았는지 알고 싶다면 매우 간단합니다. 내가 한 일은에서 placesTableView의 대리인으로 자신을 설정하는 것이 었습니다 - (void)viewDidLoad이런 placesTableView.delegate = self;. 또한 UITableViewDelegate를 준수한다고 말 하도록 @interface문을 로 변경 @interface KrackMapViewController () <UITableViewDelegate>해야했습니다. 이제 트릭이 있습니다. UITableViewDelegate는 UIScrollViewDelegate를 따릅니다. 즉, 스크롤 뷰 델리게이트의 메서드를 구현할 수 있습니다. 특히 흥미로운 것은 다음과 같습니다.

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { NSLog(@"Did scroll with insetTop: %f, insetBottom: %f, contentOffset: %f", placesTableView.contentInset.top, placesTableView.contentInset.bottom, placesTableView.contentOffset.y); }

이를 통해 tableView를 드래그하기 시작할 때 알 수 있으며, 거기에서 단순히 다른 매개 변수를 NSLog out합니다.

도움이 되었기를 바랍니다. 이것이 당신에게 효과가 있는지 알려주십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

활성 div가 닫힌 후 스크롤 막대가 스크롤되지 않음

분류에서Dev

UIkeyboard가 마지막 텍스트 필드에서 사라진 후 UITableView contentInset 문제

분류에서Dev

오버레이보기가 제거 된 후 Recyclerview가 스크롤되지 않음

분류에서Dev

TodayExtension의 ViewWillAppear가 맨 위로 스크롤 한 후 호출되지 않음

분류에서Dev

스크롤 후 탐색 링크가 작동하지 않음

분류에서Dev

페이지가로드 된 후 스크롤바의 크기가 조정되지 않음

분류에서Dev

포스트 백 후 체크 박스가 체크되지 않음

분류에서Dev

Flutter : ListView가 스크롤되지 않음

분류에서Dev

Flutter Page가 스크롤되지 않음

분류에서Dev

HorizontalListview가 스크롤되지 않음

분류에서Dev

jQuery로드 후 부트 스트랩 탐색 메뉴가 스크롤 / 첨부되지 않음

분류에서Dev

스윙에서 스크롤 한 후 JScrollPane에 콘텐츠가 표시되지 않음

분류에서Dev

스크롤 막대 tkinter가 스크롤되지 않음

분류에서Dev

체크 박스 후 JQuery Mobile Div가 표시되지 않음

분류에서Dev

bash 스크립트 var가 루프 후 변경되지 않음

분류에서Dev

스크롤 후 <ui> 목록 하이퍼 링크가 작동하지 않음

분류에서Dev

스크롤 후 배경이 확장되지 않음

분류에서Dev

프로젝트 손상 후 registerNib UiTableView가 작동하지 않음

분류에서Dev

UIWebView로 인해 UITableView가 스크롤되지 않습니다.

분류에서Dev

becomeFirstResponder에서 UITableView가 스크롤되지 않습니다.

분류에서Dev

UIScrollView 컨트롤러가 완전히 스크롤되지 않음

분류에서Dev

NSURL 델리게이트 후 UITableView 델리게이트가 호출되지 않음

분류에서Dev

-ErrorAction 중지 후 스크립트 처리가 중지되지 않음

분류에서Dev

양식이 스크롤되지만 스크롤바가 움직이지 않음

분류에서Dev

스크롤 후 iOS, UITableView, 들여 쓰기가 예기치 않게 변경됨

분류에서Dev

스크래피가 DFS 순서로 크롤링되지 않음

분류에서Dev

디스크가 가득 찬 후 neo4j가 시작되지 않음

분류에서Dev

TableView 위젯의 텍스트가 스크롤되지 않음

분류에서Dev

UIScrollView가 스크롤되지 않음 (스토리 보드)

Related 관련 기사

  1. 1

    활성 div가 닫힌 후 스크롤 막대가 스크롤되지 않음

  2. 2

    UIkeyboard가 마지막 텍스트 필드에서 사라진 후 UITableView contentInset 문제

  3. 3

    오버레이보기가 제거 된 후 Recyclerview가 스크롤되지 않음

  4. 4

    TodayExtension의 ViewWillAppear가 맨 위로 스크롤 한 후 호출되지 않음

  5. 5

    스크롤 후 탐색 링크가 작동하지 않음

  6. 6

    페이지가로드 된 후 스크롤바의 크기가 조정되지 않음

  7. 7

    포스트 백 후 체크 박스가 체크되지 않음

  8. 8

    Flutter : ListView가 스크롤되지 않음

  9. 9

    Flutter Page가 스크롤되지 않음

  10. 10

    HorizontalListview가 스크롤되지 않음

  11. 11

    jQuery로드 후 부트 스트랩 탐색 메뉴가 스크롤 / 첨부되지 않음

  12. 12

    스윙에서 스크롤 한 후 JScrollPane에 콘텐츠가 표시되지 않음

  13. 13

    스크롤 막대 tkinter가 스크롤되지 않음

  14. 14

    체크 박스 후 JQuery Mobile Div가 표시되지 않음

  15. 15

    bash 스크립트 var가 루프 후 변경되지 않음

  16. 16

    스크롤 후 <ui> 목록 하이퍼 링크가 작동하지 않음

  17. 17

    스크롤 후 배경이 확장되지 않음

  18. 18

    프로젝트 손상 후 registerNib UiTableView가 작동하지 않음

  19. 19

    UIWebView로 인해 UITableView가 스크롤되지 않습니다.

  20. 20

    becomeFirstResponder에서 UITableView가 스크롤되지 않습니다.

  21. 21

    UIScrollView 컨트롤러가 완전히 스크롤되지 않음

  22. 22

    NSURL 델리게이트 후 UITableView 델리게이트가 호출되지 않음

  23. 23

    -ErrorAction 중지 후 스크립트 처리가 중지되지 않음

  24. 24

    양식이 스크롤되지만 스크롤바가 움직이지 않음

  25. 25

    스크롤 후 iOS, UITableView, 들여 쓰기가 예기치 않게 변경됨

  26. 26

    스크래피가 DFS 순서로 크롤링되지 않음

  27. 27

    디스크가 가득 찬 후 neo4j가 시작되지 않음

  28. 28

    TableView 위젯의 텍스트가 스크롤되지 않음

  29. 29

    UIScrollView가 스크롤되지 않음 (스토리 보드)

뜨겁다태그

보관