UITableView에서 셀 앞의 빈 공간 제거
현재 UITableView
뷰 컨트롤러 상단이 아닌 다른 위치에을 넣으려고합니다 . 이 말로 네비게이션 바를 설명하기 위해 상단에 헤더를 추가하려고하지만 컨트롤러 상단에 없기 때문에 필요하지 않습니다.
UITableView
셀을 원하는 곳 의 왼쪽 상단 모서리에 넣으면 셀이 배치되지 않습니다.
이제 테이블 뷰를 위로 이동하여 셀이 올바른 위치에 있으면 다른 문제가 발생합니다. 스크롤 할 때 셀이 거기까지 올라갈 수 있습니다 (이것은 내 손가락으로 내비게이션 컨트롤러 위에 있음).
내가 놓았을 때, 그렇습니다-셀은 검색 창 바로 아래로 갈 것입니다. 그러나 이것은 당신이 그것을 그 위로 가져올 수있는 방법에 분명히 문제입니다.
어떻게하면 되나요? 더 쉬운 방법이 있습니까?
UITableView
아래로 스크롤 할 때 빈 칸에 쇼 의 셀이 있습니까?
그렇다면 문제는 UITableView
보기에있는 내비게이션 컨트롤러로 인해 추가 된 삽입물 일 수 있습니다. 스크롤이 발생하지 않은 경우 탐색 모음 아래에 컨텐츠를 배치하기 위해 삽입 된 내용이 테이블보기에 추가됩니다. 표를 스크롤하면 내용이 스크롤되어 투명한 탐색 막대 아래에 표시됩니다. 이 동작은 물론 테이블보기가 탐색 표시 줄에서 직접 시작하는 경우에만 필요합니다. 여기에는 해당되지 않습니다.
주목해야 할 또 다른 사항은 iOS가보기 계층 구조의 첫 번째보기 UIScrollView
또는 하위 항목 (예 : UITableView
및 UICollectionView
) 인 경우에만 콘텐츠 삽입을 조정한다는 것입니다 . 뷰 계층 구조에 여러 개의 스크롤 뷰가 포함 된 automaticallyAdjustsScrollViewInsets
경우 첫 번째 스크롤 뷰만 조정합니다.
이 동작을 변경하는 방법은 다음과 같습니다.
a) 인터페이스 빌더
- 뷰 컨트롤러를 선택하십시오
- 개방형 속성 관리자
IB의 속성 관리자 (보기 컨트롤러가 선택된 경우)에는 "스크롤보기 삽입 조정"이라는 속성이 있으며 기본적으로 켜져 있습니다. 이 옵션을 체크 해제하십시오 :
( Dheeraj D 의 이미지 제공 )
어떤 Xcode 버전이이 옵션을 도입했는지 확실하지 않지만 (릴리스 정보에서이 옵션을 발견하지는 못했지만) 적어도 버전 5.1.1에서는 사용할 수 있습니다.
편집 : 혼란을 피하기 위해 이것은 주석에서 언급 된 세 번째 옵션이었습니다
b) 프로그래밍 방식으로
이것을 ie에 추가하십시오 viewDidLoad
( Slavco Petkovski 의 답변과 Cris R 의 의견에 대한 신용 )
// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;
// Swift
self.automaticallyAdjustsScrollViewInsets = false
c) 이것은 고등학생과 관련이있을 수 있습니다
추가하여이 문제를 해결할 수 있습니다
tableView.contentInset = UIEdgeInsetsZero
//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero
또는 IB를 사용하고 있고 탐색 표시 줄이 투명하지 않은 경우 (스크린 샷에서 알 수 없음)
- 뷰 컨트롤러를 선택하십시오
- 개방형 속성 관리자
- View Controller 옵션 모서리 확장 섹션에서 "상단 막대 아래"를 선택 취소합니다.
나는이 같은 문제가 있었고 UIView가 한 시점에 있다고 확신합니다. 전체 테이블보기를 복사하고 삭제 한 다음 다시 붙여 넣으면 문제가 해결되었습니다.
스토리 보드에서 테이블 뷰를 선택하고 스타일이 "그룹화"대신 "일반"으로 설정되어 있는지 확인하십시오. 속성 관리자 탭에서이 설정을 찾을 수 있습니다.
내 경우에는 뷰 계층의 UITableView 아래에 UILabel이 있습니다.
나는 그것을“앞으로”움직 였고 빈 공간이 나타났다. 왜 그런지 확실하지 않지만 tableView 아래에 아무것도 없으면 공백이 숨겨집니다.
또한 스토리 보드의 뷰 컨트롤러 관리자에서 "스크롤 뷰 삽입 조정"을 확인 / 취소 할 수 있습니다.
위의 어느 것도 나를 도와주지 않았습니다. 그러나 이렇게 하면 도움이되었습니다 .
self.tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)
'-64'대신 내비게이션 바의 높이에 따라 다른 숫자를 입력 할 수 있습니다.
미리 추가되어있을 수 있습니다 UIRefreshControl
. 다음과 같은 코드 로이 문제가 있습니다.
self.refreshControl = [[UIRefreshControl alloc] init];{
[self.refreshControl setAttributedTitle:[[NSAttributedString alloc]
initWithString:@"Your string"]];
[self.refreshControl addTarget:self
action:@selector(updateScreen)
forControlEvents:UIControlEventValueChanged];
}
보시다시피, 나는 self.refreshController
즉시init
그러나 설정 refreshControl
후 설정하면 최상위 공간이 방해가되지 않습니다.
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];{
[self.refreshControl setAttributedTitle:[[NSAttributedString alloc]
initWithString:@"Your String"]];
[self.refreshControl addTarget:self
action:@selector(updateScreen)
forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
}
iOS 11 에서이 작업을 수행하는 경우 더 이상 사용되지 않아 자동 조정 ScrollViewInsets가 작동하지 않습니다.이 게시물의 답변에 따라 다음 코드가 작동했습니다. https://stackoverflow.com/a/44391269/5476481
if #available(iOS 11.0, *) {
tblView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
도움이 되었기를 바랍니다.
확실히 말할 수는 없지만 프로토 타입 셀이 시작되는 위치와 UITableView의 상단 사이에 여분의 UIView가 붙어있는 것처럼 보입니다. 내가 추가 한 텍스트 / 줄을 제거하면 내 이미지가 정확하게 이미지처럼 보입니다.
나는 아직도 그 여분의 공간이 맨 위에 생긴 이유를 확신하지 못하지만 UITableView를 공백으로 삭제하고 새로운 것으로 바꾸면 공간이 사라짐을 알았습니다.
I must have dragged a UIView in there accidentally, but I couldn't select it so I couldn't delete.
In the Storyboard , set the contentInsets
of your tableview
to Never
Check your tableview frame in storyboard or xib. Mine by default has a y position value, hence the bug
In my application also I've experienced an issue like this. I've set top edge inset of tableView zero. Also tried set false
for automaticallyAdjustsScrollViewInsets
. But didn't work.
Finally I got a working solution. I don't know is this the correct way. But implementing heightForHeaderInSection
delegate method worked for me. You have to return a non-zero value to work this (return zero will display same space as before).
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0.1
}
In iOS 11 and above, apple has changed property to adjust content inset. Use contentInsetAdjustmentBehavior
and set .never
to remove extra space above UICollectionView
, UIScrollView
, UITableView
.
if #available(iOS 11.0, *) {
// For scroll view
self.scrollView.contentInsetAdjustmentBehavior = .never
// For collection view
self.collectionView.contentInsetAdjustmentBehavior = .never
// For table view
self.tableView.contentInsetAdjustmentBehavior = .never
} else {
self.automaticallyAdjustsScrollViewInsets = false
}
I hope this will help you.
Well for me the problem occurred when I dragged a prototype cell from the menu into the table view. So I deleted that and just set prototype cell to 1 in table view inspector properties
I am doing this programmatically, and I simply moved my addSubview(tableView) to the bottom after adding all of my other subviews, and it solved my problem!
Not sure why this only appears on device and not my simulator, but either way at least there is a simple solution!
As long as UITableView is not the first subview of the view controller, the empty space will not appear.
Solution: Add a hidden/clear view object (views, labels, button, etc.) as the first subview of the view controller (at the same level as the UITableView but before it).
In 2017, what is working for me is simply this one line
navigationController?.navigationBar.isTranslucent = false
I have no idea why that would even affect it. Perhaps someone could explain. But I'm pretty sure this is the answer most people would look for.
UIView can be inserted at the top and bottom of the table(drag and drop). Set their properties as transparent and height of 1 px. This is to remove the extra padding in front of the cells.
I also had this problem the tableView wasn't the last view in the hierarchy. In my case i had a view above (even though they were not overlapping each other), so i dragged it above the tableView in the hierarchy and that made it.
I just found a solution for this.
Just select tableview and clic Editor -> Arrange -> Send to Front
It worked for me and hope it helps you all.
In my case, i was using ContainerViewController and putting UITableViewController in it. After removing ContainerViewController. Issues goes away.
Xcode 8 bug…
Try this first if your Storyboard UITableView style is set to Plain.
Set the table's style to Grouped and then back to Plain. This removed the space in my app at the head of my UITableView.
In my case I was using a container view.(Main View --> Contaner View --> UITableView)
The extra space at the top, I think, is like space of the device notification bar (where the time is displayed, the battery). I really do, it's not an assumption.
What I did was from the UI Builder:
- select the Table View Controller complete
- Open Attributes inspector
- -> 컨트롤러보기-> 레이아웃-> "원하는 전체 화면 선택"으로 이동하십시오.
이 코드를 사용하여 테이블이 생성되는 viewDidLoad 또는 viewDidAppear에 사용할 수 있습니다.
// Remove blank space on header of table view
videoListUITableView.contentInset = UIEdgeInsetsZero;
// The iOS device = iPhone or iPod Touch
CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size;
// Set the height of the table on the basis of number of rows
videoListUITableView.frame = CGRectMake(videoListUITableView.frame.origin.x, videoListUITableView.frame.origin.y, videoListUITableView.frame.size.width, iOSDeviceScreenSize.height-100);
// Hide those cell which doesn't contain any kind of data
self.videoListUITableView.tableFooterView = [[UIView alloc] init];
I just found a solution for this. In my case, i was using TabBarViewController, A just uncheck the option 'Adjust Scroll View Insets'. Issues goes away.
https://i.stack.imgur.com/vRNfV.png
스토리 보드에서 ViewController의 확장 에지를 설정하여 underTopBar
속성이 선택되지 않도록합니다.
같은 문제가 발생했습니다. viewDidLoad에 다음을 추가하여 해결했습니다.
self.extendedLayoutIncludesOpaqueBars = true
스위프트 5
tableHeaderView 및 tableFooterView 를 제거하십시오.
var frame = CGRect.zero
frame.size.height = .leastNormalMagnitude
tblView.tableHeaderView = UIView(frame: frame)
tblView.tableFooterView = UIView(frame: frame)
확인
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
- tableview 델리게이트 함수 cellForRowAtIndexPath를 언급하십시오 .
- iOS 6과 7을 모두 처리 할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/18906919/remove-empty-space-before-cells-in-uitableview
'Programing' 카테고리의 다른 글
OSX에 설치된 모든 gem을 제거 하시겠습니까? (0) | 2020.05.29 |
---|---|
IIS Express 웹 응용 프로그램을 중지 한 후 실행중인 사이트를 즉시 종료 (0) | 2020.05.29 |
APK를 설치하지 않고 Android .apk 파일 VersionName 또는 VersionCode 가져 오기 (0) | 2020.05.29 |
타임 스탬프를 stdin 앞에 추가하는 Unix 유틸리티가 있습니까? (0) | 2020.05.29 |
Visual Studio 2010의 솔루션 탐색기에서 파일을 찾는 방법은 무엇입니까? (0) | 2020.05.29 |