我正在编写一个使用UIProgressView的程序,该程序在程序执行期间以编程方式添加并隐藏/显示。我有以下代码在iOS 5中工作。代码通过添加UIProgressView作为UITableView超级视图的子视图,将UIProgressView“添加到UITableView下面”。当UITableView滚动时,这也将UIProgressView保持在一个位置。
在viewDidLoad中,我设置了UIProgressView的框架
UIProgressView * progressBar = [[[UIProgressView alloc]
initWithProgressViewStyle:UIProgressViewStyleBar] retain];
progressBar.hidden = NO;
progressBar.progress = [[NSUserDefaults standardUserDefaults] floatForKey:@"progress"];
//Set up the UIProgressView
frameForProgressBar = CGRectMake(0.0f,
self.tableView.frame.origin.y +
self.tableView.frame.size.height -
progressBar.frame.size.height,
self.tableView.frame.size.width,
progressBar.frame.size.height);
progressBar.frame = frameForProgressBar;
insetsForTableView = UIEdgeInsetsMake(0.0, progressBar.frame.size.height, 0.0, 0.0);
然后当我想要UIProgressView出现时
// Add the Progress bar to the Window
progressBarState = ADD_PROGRESS_BAR;
[self.view.superview addSubview:progressBar];
所以我可以看到UIProgressView,我改变了UITableView的contentInsets。为了适应iOS 7,我读到对contentInsets的更改必须在viewWillLayoutSubviews中发生。
-(void) viewWillLayoutSubviews
{
switch (progressBarState)
{
case ADD_PROGRESS_BAR:
// Set the frame of the UITableView to allow the UIProgressView to appear
self.tableView.contentInset = insetsForTableView;
break;
case REMOVE_PROGRESS_BAR:
self.tableView.contentInset = UIEdgeInsetsZero;
break;
default:
break;
}
progressBarState = UNDEFINED_PROGRESS_BAR;
}
我通过调试器运行此代码,并调用viewWillLayoutSubviews。但是,我没有看到UITableView调整大小,我没有看到UIProgressView。我尝试为UITableView设置一个框架,使其比屏幕小得多,然后为UIProgressView设置一个框架,将其置于“空”空间。但是,我仍然无法看到UIProgressView。
有人可以建议我为什么看不到UIProgressView吗?
谢谢,
Jason Mazzotta
答案 0 :(得分:0)
将UIViewController的automaticAdjustsScrollViewInsets属性设置为NO。 由于此属性适用于iOS 7及更高版本,因此请使用respondToSelector方法检查可用性。