0

SplitViewControllerマスター(カスタム)と詳細ビューコントローラーを持つカスタムを作成しましたが、UITableViewこれはiPadのランドスケープモードで完全に機能します。

方向がポートレートモードに変わったときに、マスタービューと詳細ビューのサイズを変更して配置し、物事が場違いに見えないようにしたいと考えています。

どうすればこれを実現できるか、誰にも分かりますか?

アップデート :

カスタム SplitViewController にリスナーを作成して、方向の変化を監視し、それを次のようなセレクター (resetViews:) に接続しました。

-(void)resetViews{

 if(currentOrientation == UIDeviceOrientationPortrait || currentOrientation ==       UIDeviceOrientationPortraitUpsideDown){

    self.view.frame = CGRectMake(0, 0, 768, 1024);
    masterView.frame = CGRectMake(MASTER_VIEW_PORTRAIT_X,MASTER_VIEW_PORTRAIT_Y,MASTER_VIEW_WIDTH_PORTRAIT,MASTER_VIEW_HEIGHT_PORTAIT);
    detailView.frame = CGRectMake(DETAIL_VIEW_PORTRAIT_X, DETAIL_VIEW_PORTRAIT_Y, DETAIL_VIEW_WIDTH_PORTRAIT, DETAIL_VIEW_HEIGHT_PORTAIT);



}
if(currentOrientation == UIDeviceOrientationLandscapeRight || currentOrientation == UIDeviceOrientationLandscapeLeft){
    NSLog(@"IN Landscape");
    self.view.frame = CGRectMake(0, 0, 1024, 768);
   masterView.frame = CGRectMake(MASTER_VIEW_LANDSCAPE_X,MASTER_VIEW_LANDSCAPE_Y,MASTER_VIEW_WIDTH_LANDSCAPE,MASTER_VIEW_HEIGHT_LANDSCAPE);
    detailView.frame = CGRectMake(DETAIL_VIEW_LANDSCAPE_X,DETAIL_VIEW_LANDSCAPE_Y, DETAIL_VIEW_WIDTH_LANDSCAPE, DETAIL_VIEW_HEIGHT_LANDSCAPE);


}

}

これは、viewControllers のフレームを設定している間は正常に機能します。

ただし、MasterViewController (UITableViewController) は、向きが変わると行の高さ (tableView.rowHeight) を動的に変更する必要があります。向きが変わるたびにtableView全体([tableView reloadData])をリロードする必要なく、これを行うにはどうすればよいですか?

4

2 に答える 2

0

ビューの目的のサイズ変更動作を指定するために autoresizingMasks を設定しようとしましたか? このようなものは、あなたが説明したサイズ変更と一致するはずです:

splitViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoResizingFlexibleHeight;
masterViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoResizingFlexibleHeight;
detailViewController.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoResizingFlexibleHeight;
于 2012-08-24T14:35:11.710 に答える
0

UISplitViewController をサブクラス化し、splitViewController をそのクラスに設定します。次に、このメソッドを UISplitViewController サブクラスに追加します。

-(BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {
    return NO;
}

詳細ビューを交換する簡単な方法が必要な場合は、次のメソッドを追加します。

-(void)setDetailControllerTo:(UIViewController *)detailController withNavControllerTitle:(NSString *)title {
[detailController view]; // this line forces the viewDidLoad method to be called

if (title) {
    UINavigationController *navController = [[UINavigationController alloc] init];
    [navController pushViewController:detailController animated:YES];
    detailController.title = title;

    NSArray *viewControllers=@[self.mainController.viewControllers[0],navController];
    self.mainController.viewControllers = viewControllers;
} else {
    NSArray *viewControllers=@[self.mainController.viewControllers[0],detailController];
    self.mainController.viewControllers = viewControllers;
}

}

このメソッドを呼び出すには、tableView:didSelectRowAtIndexPath: メソッドのマスター ビュー コントローラーから次のようにします。

FixedSplitViewController *splitController = (FixedSplitViewController*) self.splitViewController;

CurrentEventViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"CurrentEventViewController"];
// add any setup code here
[splitController setDetailControllerTo:controller withNavControllerTitle:@"Current Event"];
于 2013-11-08T16:20:51.823 に答える