gpt4 book ai didi

iphone - 半透明状态栏下带有 UIRefreshControl 的 UITableView

转载 作者:可可西里 更新时间:2023-11-01 03:38:17 25 4
gpt4 key购买 nike

我创建了一个 UITableView,我想在半透明的黑色状态栏下方滚动它。在我的 XIB 中,我只是将 TableView 的 y 位置设置为 -20,一切看起来都很好。

现在,我刚刚添加了一个下拉刷新 iOS6 UIRefreshControl,它可以工作,但是,由于 -20 y 位置,它从状态栏后面拖动。我希望它“拉伸(stretch)到”位置在状态栏下方而不是后面。

它搞砸的原因是有道理的,但改变它的框架似乎没有任何区别,tableview 的内容插图等也没有什么区别。

文档建议一旦设置了 refreshControl,UITableViewController 就会从那时起处理它的位置。

有什么想法吗?

最佳答案

您可以子类化 UIRefreshControl 并像这样实现 layoutSubviews:

@implementation RefreshControl {
CGFloat topContentInset;
BOOL topContentInsetSaved;
}

- (void)layoutSubviews {
[super layoutSubviews];

// getting containing scrollView
UIScrollView *scrollView = (UIScrollView *)self.superview;

// saving present top contentInset, because it can be changed by refresh control
if (!topContentInsetSaved) {
topContentInset = scrollView.contentInset.top;
topContentInsetSaved = YES;
}

// saving own frame, that will be modified
CGRect newFrame = self.frame;

// if refresh control is fully or partially behind UINavigationBar
if (scrollView.contentOffset.y + topContentInset > -newFrame.size.height) {
// moving it with the rest of the content
newFrame.origin.y = -newFrame.size.height;

// if refresh control fully appeared
} else {
// keeping it at the same place
newFrame.origin.y = scrollView.contentOffset.y + topContentInset;
}

// applying new frame to the refresh control
self.frame = newFrame;
}

它会将 tableView 的 contentInset 考虑在内,但您可以将 topContentInset 变量更改为您需要的任何值,它会处理其余的。

我希望代码有足够的文档来理解它是如何工作的。

关于iphone - 半透明状态栏下带有 UIRefreshControl 的 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12913208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com