willRotatetoInterfaceOrIEntation:时间:.我使用UItableVIEwController和tableheaderVIEw中的搜索栏创建了一个示例.
场景1:
给定设备在纵向,我隐藏搜索栏
然后我将设备旋转到横向
之后,我希望不要看到UISearchbar和contentOffset保持不变.
场景2:
给定设备在横向,我隐藏搜索栏
然后我将设备旋转为肖像
之后,我希望不要看到UISearchbar和contentOffset保持不变.
方案1按预期工作.场景2d出搜索栏,内容偏移为零
有人知道为什么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); NSLog(@"y %f",y); NSLog(@"Begin offset %@",NsstringFromCGPoint(self.tableVIEw.contentOffset)); });}- (voID)vIEwDIDAppear:(BOol)animated{ self.tableVIEw.tableheaderVIEw = [[UISearchbar alloc] initWithFrame:CGRectMake(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解决方法 我想我知道问题出在哪里:
UItableVIEw具有默认的自动调整遮罩.因此,在将设备从纵向旋转到横向之后,UItableVIEw变得越来越小(不会改变偏移).如果用户现在回到纵向,则需要拉伸UItableVIEw并自动滚动到顶部.为了解决这个问题,我使用了一个变量来注册每个“用户滚动”
> scrollVIEwWillBeginDragging(注册)
> scrollVIEwDIDEndDecelerating(unregistrate)
>在“scrollVIEwDIDScroll”中我检查滚动是否来自用户(如果来自用户保存偏移值)
最后在方法“willRotatetoInterfaceOrIEntation”中,我将临时保存的偏移量设置为UItableVIEw,以使其保持在同一位置.
我希望有更好的解决方案,因为我解决这个问题的方法有点棘手.
总结以上是内存溢出为你收集整理的objective-c – 从Landscape到Portrait(iPad)旋转后UITableView的奇怪行为全部内容,希望文章能够帮你解决objective-c – 从Landscape到Portrait(iPad)旋转后UITableView的奇怪行为所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)