在方法willRotateToInterfaceOrientation:duration:中,我试图读取UITableView旋转后的contentOffset。我创建了一个使用UITableViewController和tableHeaderView中的搜索栏的示例。
情况1: 假设设备处于纵向,并且我隐藏了搜索栏。 然后,我将设备旋转到横向。 之后,我不希望看到UISearchbar并且contentOffset保持不变。
情况2: 假设设备处于横向,并且我隐藏了搜索栏。 然后,我将设备旋转到纵向。 之后,我不希望看到UISearchbar并且contentOffset保持不变。
情况1按预期工作。情况2弹出搜索栏,而contentOffset为零。
有人知道为什么ContentOffset为零吗?我希望它是44(搜索栏的高度)。
有没有办法解决这个问题?你会怎么做?
情况1: 假设设备处于纵向,并且我隐藏了搜索栏。 然后,我将设备旋转到横向。 之后,我不希望看到UISearchbar并且contentOffset保持不变。
情况2: 假设设备处于横向,并且我隐藏了搜索栏。 然后,我将设备旋转到纵向。 之后,我不希望看到UISearchbar并且contentOffset保持不变。
情况1按预期工作。情况2弹出搜索栏,而contentOffset为零。
有人知道为什么ContentOffset为零吗?我希望它是44(搜索栏的高度)。
有没有办法解决这个问题?你会怎么做?
//
// ViewController.m
// test
//
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Uncomment the following line to preserve selection between presentations.
// self.clearsSelectionOnViewWillAppear = NO;
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
//is necessary to prevent showing searchbar
dispatch_async(dispatch_get_main_queue(), ^{
double y = self.tableView.contentOffset.y;
self.tableView.contentInset = UIEdgeInsetsMake(-1*y, 0, 0, 0);
NSLog(@"y %f",y);
NSLog(@"Begin offset %@",NSStringFromCGPoint(self.tableView.contentOffset));
});
}
- (void)viewDidAppear:(BOOL)animated{
self.tableView.tableHeaderView = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 44)];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
#warning Potentially incomplete method implementation.
// Return the number of sections.
return 0;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
#warning Incomplete method implementation.
// Return the number of rows in the section.
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
return cell;
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}
@end