일반 jane UITableView를 iOS 7의 UIViewController로 드래그했습니다.
이제 첫 번째 셀이 시작되기 전에 공간의 수직 오프셋이 있습니다. 어떻게 제거합니까? 첫 번째 줄이 UITableView가 실제로 시작되는 위쪽 가장자리에 훨씬 더 가깝기를 원합니다. 나는 큰 오프셋을 요구하지 않았습니까?
어떤 아이디어?
일반 jane UITableView를 iOS 7의 UIViewController로 드래그했습니다.
이제 첫 번째 셀이 시작되기 전에 공간의 수직 오프셋이 있습니다. 어떻게 제거합니까? 첫 번째 줄이 UITableView가 실제로 시작되는 위쪽 가장자리에 훨씬 더 가깝기를 원합니다. 나는 큰 오프셋을 요구하지 않았습니까?
어떤 아이디어?
답변:
기본적으로 테이블 뷰 컨트롤러는 내비게이션 바 아래에 콘텐츠를 패딩하므로 콘텐츠를 스크롤하여 내비게이션 바 / 툴바 아래에서 흐릿한 상태로 볼 수 있습니다.
탐색 막대 아래에서 이동하기 위해 44 (아마 64) px에 배치하는 것처럼 보이지만 이미이를 보완하므로 큰 간격이 생깁니다.
IB의 스토리 보드 / xib로 이동하여 탐색 모음 항목 아래에있는 쇼 콘텐츠를 선택 해제합니다.
Adjust Scroll View insets
있습니다. 체크 표시를 제거합니다.
UIViewController 의 새로운 iOS 7 구현 에는 개발자가 시스템이 UIScrollView , UITableView에 대한 삽입을 자동으로 추가할지 여부를 선택할 수있는 새로운 옵션 세트가 있습니다. 및 파생에 .
인터페이스 빌더에서 모든 원 UIViewControllers에 대한이 상자의 선택을 취소이 동작을 해제하려면에 있는 UIViewController 객체 관리자를 선택 :
상세 사항은:
스크롤 뷰의 콘텐츠 삽입이 자동으로 조정되지 않도록하려면 automaticAdjustsScrollViewInsets를 NO로 설정하십시오. (autoAdjustsScrollViewInsets의 기본값은 YES입니다.)
self.automaticallyAdjustsScrollViewInsets = NO;
Adjust Scroll View Insets
보기 컨트롤러 레이아웃 의 확인란을 선택 취소합니다 .
automaticallyAdjustsScrollViewInsets = NO
뷰 컨트롤러에서 설정 합니다.
비슷한 문제가 발생했습니다. viewController를 닫은 후 내 tableView의 contentOffset이 (0, -64)로 변경되었습니다.
내 솔루션은 약간 이상했습니다. 다른 모든 답변을 시도했지만 성공하지 못했습니다. 내 문제를 해결 한 유일한 방법은 .xib의 컨트롤 트리에서 tableView 위치를 전환하는 것입니다.
다음과 같은 상위 뷰의 첫 번째 컨트롤입니다.
ImageView 바로 뒤에 tableView를 옮겼고 작동했습니다.
테이블 뷰를 첫 번째 위치에 두는 것이 문제를 일으키는 것으로 보이며 테이블 뷰를 다른 위치로 이동하면 문제가 해결되었습니다.
PD 나는 autoLayout도 스토리 보드를 사용하지 않는다
이것이 누군가를 도울 수 있기를 바랍니다!
내 비슷한 문제를 해결합니다.
if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){
tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);
}
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
이것을 사용해보십시오
tableView.separatorInset = UIEdgeInsetsZero;
분명히 iOS7 미만을 지원하는 경우 객체를 호출하기 전에이 선택기에 응답하는지 확인해야합니다.
아이폰 OS 9으로,이 페이지에서 다른 답변 중 어느 것도 설정, 스토리 보드에서 (나를 위해, 즉 선택 취소 상자를 일하지 automaticallyAdjustsScrollViewInsets
에NO
).
내가 정말 불만족스러운 해결 방법은 다음과 같습니다.
- (void)viewDidAppear:(BOOL)animated {
self.tableView.contentOffset = CGPointMake(0.0, 0.0);
self.tableView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);
}
동일한 라인 viewWillAppear
또는 viewDidLoad
효과가 있었다.
Adjust Scroll View insets
체크 박스는 아이폰 OS 9 작동
간혹 내비게이션 컨트롤러에 내장되어 64
있을 때 테이블 뷰 상단에 높이 간격 UIViewController
이 생깁니다.
과거에는 모든 것을 재창조하고 깨끗한 슬레이트 후에 제약 조건이 정확 해지기를 바랐습니다.
TIL : 당신이에 수직 구속을하지 않으려면 Top Layout Guide
, 당신은 아래로 저장할 수있는 Option
액세스에 대한 키를 Container Margin
.
그런 다음 Top Space to Superview
상수가로 설정되어 있는지 확인하십시오 0
. 이것은 적어도 나를 위해 일했습니다.
컨테이너 뷰에 UITableViewController가 포함되어 있습니다. 불필요한 64 포인트의 수직 공간을 없애기 위해 Interface Builder에서 'Adjust Scroll View Insets'의 선택을 취소하고 UITableViewController의 viewWillAppear에서 UITableView의 contentInset을 아래와 같이 설정해야했습니다.
세로 공간의 크기는 탐색 모음의 프레임 높이 및 y 오프셋과 일치하는 것으로 나타납니다. 문제는 iOS 7에서만 발생했습니다.
- (void)viewWillAppear:(BOOL)animated;
{
[super viewWillAppear:animated];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
const CGRect navBarFrame = self.navigationController.navigationBar.frame;
const CGFloat blankVerticalSpace = navBarFrame.origin.y + navBarFrame.size.height;
self.tableView.contentInset = UIEdgeInsetsMake(-blankVerticalSpace, 0, 0, 0);
}
}
Xamarin iOS에서는 포 그라운드 모달 대화 상자가 해제 된 직후 백그라운드 UITableViewController에서이 문제가 발생했습니다. 포 그라운드로 이동하는 과정에서 UITableViewController에는 인세 트가 설정되어 있습니다 (iOS의 어딘가에 있음).
이 수업은 그것을 해결했습니다.
public class UITableViewControllerWithBugFix : UITableViewController {
public UITableViewControllerWithBugFix(UITableViewStyle withStyle) : base(withStyle) {
}
public override void ViewWillLayoutSubviews() {
if (TableView.ContentInset.Top != 0.0f)
TableView.ContentInset = UIEdgeInsets.Zero;
if (TableView.ScrollIndicatorInsets.Top != 0.0f)
TableView.ScrollIndicatorInsets = UIEdgeInsets.Zero;
base.ViewWillLayoutSubviews();
}
}
때때로 나는이 끔찍한 상황으로 되돌아 가는데, 그것이 여전히 잘 알려지지 않았다는 것을 알게됩니다. 그래서, 미래의 기억을 위해 ...
최근에이 해결 방법으로 수정하고 있습니다.
이유를 묻지 마십시오. 여전히 UIKit의 버그라고 생각합니다.
스토리 보드로 이동하면 테이블을 선택하여 오프셋을 변경할 수 있으며 Attributes inspector의 Table View 섹션에서 왼쪽의 Separator Insets를 0으로 변경하면됩니다.
TableViewController를 NavigationController 또는 ContainerView에 포함시킨 경우 You have to constraint to margins instead of top Layout guide in Storyboard
. Check constraint to margins when you are doing the constraints
나를 위해 일한 다른 방법은 없습니다. 나는 코멘트를 할 수 없었기 때문에 Robert Chens의 대답을 반복하고 있습니다.
몇 가지 답변을 시도했습니다. 스토리 보드에서 설정을 변경하면 왼쪽에서 나타나는 오버레이 메뉴에 잔물결 문제가 발생했습니다.
스토리 보드에 빈 UIViewController 만 있습니다. 그렇지 않으면 모든 것이 프로그래밍 방식으로 생성됩니다.
UIViewController 내부의 UIView 내부의 UITableView와 동일한 문제가 있습니다. 즉, UIViewController가 탐색 컨트롤러에 포함 된 경우 섹션 헤더가 너무 아래로 시작됩니다. 탐색 컨트롤러가 없으면 모든 것이 잘 작동합니다.
문제를 해결하기 위해 UILabel을 생성하고 제약 조건을 사용하여 UILabel 하단 제약 조건 = UIView의 상단 제약 조건 (화면에 표시되지 않음)을 배치했습니다. 이제 추가 컨트롤 (새 레이블)을 사용하면 TableView가 제대로 작동합니다.
inputsContainerView.addSubview(titleLabel)
inputsContainerView.addSubview(tableView)
// inputsContainerView
///////////////////////////////////////
inputsContainerView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
inputsContainerView.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: 0).isActive = true
inputsContainerView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -40).isActive = true
inputsContainerView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.7).isActive = true
// tableView
///////////////////////////////////////
tableView.centerXAnchor.constraint(equalTo: inputsContainerView.centerXAnchor).isActive = true
tableView.topAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true
tableView.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
tableView.heightAnchor.constraint(equalTo: inputsContainerView.heightAnchor).isActive = true
// titleLabel - inserted to stop bad section header behavior
///////////////////////////////////////
titleLabel.centerXAnchor.constraint(equalTo: inputsContainerView.centerXAnchor).isActive = true
titleLabel.bottomAnchor.constraint(equalTo: inputsContainerView.topAnchor).isActive = true
titleLabel.widthAnchor.constraint(equalTo: inputsContainerView.widthAnchor).isActive = true
titleLabel.heightAnchor.constraint(equalToConstant: 20).isActive = true