ios - 예제 - uitableviewcontroller




왜 iOS7에서 UITableViewStyleGrouped 스타일로 UITableView 맨 위에 추가 패딩이 있습니까? (20)

iOS7부터는 UITableView 의 스타일에 UITableViewStyleGrouped 스타일을 가진 추가 공간이 있습니다.

다음은 그 예입니다.

첫 번째 화살표에서 tableview가 시작되고 설명 할 수없는 패딩이 35 픽셀이면 녹색 헤더는 viewForHeaderInSection 의해 반환 된 UIView (여기서 섹션은 0입니다).

아무도이 35 픽셀 금액이오고 어떻게 내가 UITableViewStylePlain 전환하지 않고 그것을 없앨 수 설명 할 수 있을까?


"스크롤보기 인세 트 조정"을 선택 취소하십시오.


@Aurelien Porte의 답변에 감사드립니다. 여기 내 해결책이있다.

이 문제의 원인 : -

  1. UITableView는 높이가 0.0 인 헤더를 갖고 싶지 않습니다. 당신이하려는 일은 높이가 0 인 헤더를 갖는 것이고, 솔루션으로 이동할 수 있습니다.
  2. 나중에 헤더에 0.0이 아닌 높이를 지정하더라도 UITableView는 먼저 높이가 0.0 인 헤더를 할당하는 것을 좋아하지 않습니다.

ViewDidLoad에서 -

self.edgesForExtendedLayout = UIRectEdge.None

self.automaticallyAdjustsScrollViewInsets = false

이것과 같은 것을 필요로하지 않는다 : -

self.myTableview.contentInset = UIEdgeInsetsMake(-56, 0, 0, 0)

heightForHeaderInSection 대리자에서 : -

if section == 0
    {
        return 1
    }
    else
    {
        return 40; // your other headers height value
    }

viewForHeaderInSection 대리자에서 : -

if section == 0 
{  
   // Note CGFloat.min for swift
   // For Objective-c CGFLOAT_MIN 
   let headerView = UIView.init(frame: CGRectMake(0.0, 0.0, self.myShaadiTableview.bounds.size.width, CGFloat.min)) 
   return headerView
}
else
{ 
   // Construct your other headers here 
}

VC의 viewDidLoad에 다음을 추가하기 만하면됩니다.

self.automaticallyAdjustsScrollViewInsets = NO;

구체적으로, tableviewHeader 공간을 맨 위에서 제거하려면 다음과 같이 변경합니다.

YouStoryboard.Storyboard> YouViewController> TableView 선택> 크기 속성> 내용 인세 트 - 절대로 설정하지 마십시오.


그래서 나는 모든 방법을 여기에서 시도하고 있었고 이번에는 아무도 도왔습니다. 내 경우는 iOS 9의 그룹화 된 테이블 뷰였습니다. 왜 그런지 어떻게 알았지 만, 나를 위해 적어도 0.01 높이의 UIViewtableViewHeader 를 설정했습니다. CGRectZero 는 도움이되지 않았고 실제로 도움이되지 않았습니다.

tableView.tableHeaderView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 0.0, height: 0.01))

그룹화 된 TableView를 사용하는 동안 viewWillAppear에서 테두리 절단을 피하기 위해 이것을 사용합니다.

self.tableView.contentInset = UIEdgeInsetsMake(-35, 0, 0, 0);

나는 arielyz와 같은 수정을했다. UITableView를 부모보기의 첫 번째 하위보기가 아닌 곳에 옮기면 사라집니다. 내 공간은 35 픽셀이 아니라 20 픽셀이었습니다.

나는 초상화 xib, 단지 풍경 xib에서 그것을 재현 할 수 없었다. 레이더 버그를 나중에 간단한 데모 응용 프로그램에서 재현 할 수 있다면 파일을 보내 드리겠습니다.


나는 다음과 같은 도움을 받았다.

YouStoryboard.storyboard> YouViewController> Attributes inspector> 선택 취소 - 스크롤 뷰 인세 트 조정.


나를 위해 일한 유일한 것은 :

스위프트 :

tableView.sectionHeaderHeight = 0
tableView.sectionFooterHeight = 0

목표 -C :

self.tableView.sectionHeaderHeight = 0;
self.tableView.sectionFooterHeight = 0;

또한 첫 번째 섹션에는 여전히 여유 공간이 있습니다. 그것은 tableHeaderView 속성을 잘못 사용했기 때문입니다. 다음을 추가하여이를 수정했습니다.

self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 0.01))

내 경우에는 이것이 나를 도왔다. 나는 ios6도 지원하고있다.

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    self.edgesForExtendedLayout = UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars = NO;
    self.automaticallyAdjustsScrollViewInsets = NO;
}

내 원래 버그의 원인을 발견하고 그것을 보여주는 샘플 프로젝트를 만들었습니다. iOS7 버그가 있다고 생각합니다.

iOS7에서 Grouped 스타일로 UITableView를 만들었지 만 첫 번째 레이아웃에서 대리자를 설정하지 않은 경우 델리게이트를 설정하고 reloadData를 호출하면 상단에 절대 사라지지 않을 35px 공간이 생깁니다.

버그를 보여주는이 프로젝트를 참조하십시오 : https://github.com/esilverberg/TableViewDelayedDelegateBug

특히이 파일은 다음과 같습니다. https://github.com/esilverberg/TableViewDelayedDelegateBug/blob/master/TableViewDelayedDelegateBug/ViewController.m

24 번 라인이 활성화되면,

[self performSelector:@selector(updateDelegate) withObject:nil afterDelay:0.0];

상단에 여분의 35 픽셀 공간이 있습니다. 27 행이 활성화되고 24 행이 주석 처리 된 경우,

self.tableView.delegate = self;

상단에 공간이 없습니다. 마치 tableView가 어딘가에서 결과를 캐싱하고 델리게이트가 설정되고 reloadData가 호출 된 후 자체를 다시 그려 내지 않는 것과 같습니다.


또 다른 빠른 주석은 ... Xcode 6.1에서도 UIScrollViews , UITextViewsUITableViews 의 맨 위에 나타나는 수직 공백이있는 버그가 있습니다.

때로는이 문제를 해결할 수있는 유일한 방법은 스토리 보드에 가서 문제 컨트롤을 드래그하여 더 이상 페이지의 첫 번째 하위보기가 아닌 것입니다.

( Oded 는이 방향으로 나를 가리켜 주신 것에 대해 감사 드리며, 몇 가지 스크린 샷을 추가하고 증상을 설명하고 수정하기 위해이 주석을 게시하고 있습니다.)


스위프트 : iOS 스크롤보기에서 tableview가있었습니다. 같은 화면에서 "Back"을 클릭했을 때. 스크롤보기 상단에 더 많은 공간을 ..이 사용하려면 해결하려면 :

 self.automaticallyAdjustsScrollViewInsets = false

View Controller가 자동으로 스크롤 뷰 인세 트를 조정해야하는지 여부를 나타내는 부울 값입니다. 기본값은 true이며 뷰 컨트롤러가 상태 표시 줄, 탐색 막대 및 도구 모음 또는 탭 표시 줄에서 사용하는 화면 영역에 대한 응답으로 스크롤보기 인세 트를 조정할 수 있습니다. 뷰 계층 구조에 스크롤 뷰가 두 개 이상있는 경우와 같이 스크롤 뷰 인셋 조정을 직접 관리하려면 false로 설정하십시오.


앱에서 iOS7 이상을 실행 중인지 감지하고 테이블보기 위임자 (대개 UIViewController 코드)에이 두 가지 메소드를 추가 할 수 있습니다.

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}

이것은 아마도 우아한 해결책이 아니지만 나를 위해 일합니다.


이걸 사용하면 도움이된다고 생각합니다.

 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
 {
    return 0.005f;// set this according to that you want...
 }

이것은 Storyboard를 통해 iOS 11 및 Xcode 9.1에서 쉽게 고칠 수있는 방법입니다.

표보기> 크기 속성> 내용 삽입 : 없음을 선택하십시오.


UITableViewUIScrollView 에서 상속하는 contentInset 속성을 변경해보십시오.

self.tableView.contentInset = UIEdgeInsetsMake(-36, 0, 0, 0);

해결 방법이지만 작동합니다.


스토리 보드 :

그냥 선택 취소 : View Controller의 옵션에서 Adjust Scroll View Insets

암호:

self.automaticallyAdjustsScrollViewInsets = false

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

    return CGFLOAT_MIN;
}

그게 다야!


override func viewWillAppear(animated: Bool) {
        self.edgesForExtendedLayout = UIRectEdge.None

 //  OR

self.sampleTableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);

   //OR

 self.automaticallyAdjustsScrollViewInsets = false
        }




ios7