het*_*lek 165 objective-c uitableview ios ios7
我目前正在尝试将其放在UITableView不同的位置,而不是放在视图控制器的顶部.有了这个说,它试图在顶部添加标题来考虑导航栏,但这不是必需的,因为我没有在我的控制器的顶部.
如果我把UITableView我想要细胞的左上角放在那里,它就不会把细胞放在那里:

现在,如果我只是向上移动表视图以使单元格位于正确的位置,我会遇到一个不同的问题 - 滚动时单元格可以移动到那里(这是我的手指在导航控制器上方):

当我放手时,是的 - 单元格将在搜索栏的正下方,但这显然是一个问题,如何将它们带到它上面.
我该怎么做呢?有没有更简单的方法?
lek*_*ksi 372
UITableView向下滚动时,在空白区域显示节目的单元格吗?
如果是这样,那么问题可能是UITableView由于您在视图中使用的导航控制器而添加到插入的插图.将插入内容添加到表视图中,以便在未进行滚动时将内容放置在导航栏下方.滚动表格时,内容会滚动并显示在透明导航栏下.当然,只有当表视图直接在导航栏下面开始时才需要这种行为,这不是这里的情况.
另一件需要注意的事情是iOS调整内容插入仅适用于视图层次结构中的第一个视图(如果它是UIScrollView或它的后代)(例如UITableView和UICollectionView).如果视图层次结构包含多个滚动视图,automaticallyAdjustsScrollViewInsets则仅对第一个进行调整.
以下是更改此行为的方法:
a)Interface Builder
在IB的属性检查器中(当选择了视图控制器时),有一个名为"调整滚动视图插入"的属性,默认情况下处于打开状态.取消选中此选项:

(图片由Dheeraj D提供)
我不确定哪个Xcode版本引入了这个选项(没有在发行说明中发现它),但它至少在版本5.1.1中可用.
编辑:为避免混淆,这是评论中提到的第三个选项
b)以编程方式
将此添加到ie viewDidLoad(Slavco Petkovski的回答和Cris R的评论)
// Objective-C
self.automaticallyAdjustsScrollViewInsets = NO;
// Swift
self.automaticallyAdjustsScrollViewInsets = false
Run Code Online (Sandbox Code Playgroud)
c)这可能与老学生有关
您可以通过添加来解决此问题
tableView.contentInset = UIEdgeInsetsZero
//Swift 3 Change
tableView.contentInset = UIEdgeInsets.zero
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用IB并且导航栏不透明(无法从屏幕截图中看出)
小智 70
我有同样的问题,我很确定我在那里有一个UIView.只需复制整个表格视图,删除它并再次粘贴它就可以修复它.
在我的案例中,我在视图层次结构中的UITableView下有一个UILabel.
我把它"向前"移动,出现了空白区域.不知道为什么,但它的工作原理如下,如果在tableView下有任何东西,它会隐藏空白区域.
您还可以尝试在故事板上的视图控制器检查器上检查/取消选中"调整滚动视图插入".

有可能是预先添加的UIRefreshControl。我有这样的代码问题:
self.refreshControl = [[UIRefreshControl alloc] init];{
[self.refreshControl setAttributedTitle:[[NSAttributedString alloc]
initWithString:@"Your string"]];
[self.refreshControl addTarget:self
action:@selector(updateScreen)
forControlEvents:UIControlEventValueChanged];
}
Run Code Online (Sandbox Code Playgroud)
如你所见,我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;
}
Run Code Online (Sandbox Code Playgroud)
以上没有人帮助我.但这样做确实有帮助:
self.tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)
而不是'-64',您可以根据导航栏的高度放置任何其他数字.
如果您在 iOS 11 上执行此操作,则automatedAdjustsScrollViewInsets 将无法工作,因为它已被弃用,以下代码根据本文中的答案对我有用:https : //stackoverflow.com/a/44391269/5476481
if #available(iOS 11.0, *) {
tblView.contentInsetAdjustmentBehavior = .never
} else {
automaticallyAdjustsScrollViewInsets = false
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
尝试删除tableHeaderView和tableFooterView
var frame = CGRect.zero
frame.size.height = .leastNormalMagnitude
tblView.tableHeaderView = UIView(frame: frame)
tblView.tableFooterView = UIView(frame: frame)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100513 次 |
| 最近记录: |