我的应用程序有splitview,它仅在横向模式下激活。 在masterview我有tableview,在最后一节我有一个自定义按钮。 问题是按钮宽度保持在potrait而不是使用设备方向。 我试图在按钮和视图上使用setAutoresizingMask,但这也不起作用。
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger) sectionNum {
if (sectionNum == 4) {
CGRect frameSize;
if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) {
frameSize = CGRectMake(45.0, 0.0, 600.0, 44.0);
} else {
frameSize = CGRectMake(45.0, 0.0, 680.0, 44.0);
}
UIView *btnView = [[[UIView alloc] initWithFrame:frameSize] autorelease];
// button
UIButton* btnFind = [UIButton buttonWithType:UIButtonTypeCustom];
[btnFind setBackgroundImage:[[UIImage imageNamed:@"buttonblue.png"] stretchableImageWithLeftCapWidth:14.0 topCapHeight:0.0] forState:UIControlStateNormal];
[btnFind setBackgroundImage:[[UIImage imageNamed:@"buttonred.png"] stretchableImageWithLeftCapWidth:14.0 topCapHeight:0.0] forState:UIControlStateHighlighted];
btnFind.frame = frameSize;
btnFind.tag = 1;
[btnFind setTitle:@"Find" forState:UIControlStateNormal];
[btnFind addTarget:self action:@selector(doSearchDoc:) forControlEvents:UIControlEventTouchUpInside];
//[btnFind setAutoresizingMask:UIViewAutoresizingFlexibleRightMargin];
//[btnView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
[btnView addSubview:btnFind];
return btnView;
}
return nil;
}
有人可以告诉我如何解决此问题。
感谢。
答案 0 :(得分:1)
我有其他问题,在旋转设备时标题没有刷新,即。在我的情况中没有调用上面的方法,你可以检查是否也是这种情况。 我采用的解决方案是在旋转方法中调用reloadData:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
// This solves an issue that the header doesn't show when roating device (ok on simulator)
NSIndexPath* ipselected = [self.tableView indexPathForSelectedRow];
[self.tableView reloadData];
[self.tableView selectRowAtIndexPath:ipselected animated:false scrollPosition:UITableViewScrollPositionMiddle];
}
当然,如果您在旋转设备时能够承受全部重新加载,那么它是可用的,但通常是用户在忙于移动设备时更好地接受0.5秒延迟的时间。
或者你可以在你的按钮上保留一个ivar并用上面的方法改变它的框架。