0

UIViewサブクラスを使用して、詳細ビューをに追加していUIViewControllerます。私UIViewControllerはそれUIViewに詳細を追加subviewしています。

これが私のコードです。

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "DetailView.h"

@interface ViewController : UIViewController{
    AppDelegate *appDelegate;

    IBOutlet UILabel *lblAdd;

    IBOutlet UIView *viewDetail;

    DetailView *viewDetailfinal;
}
@property (nonatomic, retain) DetailView *viewDetailfinal;

-(IBAction) show;
-(IBAction) viewDetailHide;

@end

#import "ViewController.h"
#define detailPortraitWidth 478
#define detailPortraitHeight 899
#define detailLandscapeWidth 733
#define detailLandscapeHeight 642

#define viewDetailHeaderHeight 150

@implementation ViewController
@synthesize viewDetailfinal;


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    viewDetailfinal.curOrientation = [UIDevice currentDevice].orientation;
    return YES;
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    BOOL isPortrait = UIDeviceOrientationIsPortrait(self.interfaceOrientation);
    if (isPortrait) {
        if (!viewDetail.isHidden) {

            [viewDetailfinal selfSetFrame:CGRectMake(0, viewDetailHeaderHeight, detailPortraitWidth , detailPortraitHeight-viewDetailHeaderHeight)];
            [viewDetailfinal loadCommonView];
        }
    }
    else{
        if (!viewDetail.isHidden) {
            [viewDetailfinal selfSetFrame:CGRectMake(0, viewDetailHeaderHeight, detailLandscapeWidth , detailLandscapeHeight-viewDetailHeaderHeight)];
            [viewDetailfinal loadCommonView];
        }
    }

}
-(IBAction) show{
    BOOL isPortrait = UIDeviceOrientationIsPortrait(self.interfaceOrientation);
    if (isPortrait) {
        if (viewDetail.isHidden) {
            viewDetail.hidden=NO;            
            [self.view addSubview:viewDetail];

            viewDetailfinal = [[DetailView alloc] initWithFrame:CGRectMake(0, viewDetailHeaderHeight, detailPortraitWidth, detailPortraitHeight-viewDetailHeaderHeight)];

            viewDetailfinal.curOrientation = UIDeviceOrientationPortrait;

            [viewDetail addSubview:viewDetailfinal];
            [viewDetailfinal loadCommonView];
        }
        else{
            viewDetailfinal.curOrientation = UIDeviceOrientationPortrait;
            [viewDetailfinal selfSetFrame:CGRectMake(0, viewDetailHeaderHeight, detailPortraitWidth, detailPortraitHeight-viewDetailHeaderHeight)];
        }
    }
    else{
        if (viewDetail.isHidden) {
            viewDetail.hidden=NO;

            [self.view addSubview:viewDetail];

            viewDetailfinal = [[DetailView alloc] initWithFrame:CGRectMake(0, viewDetailHeaderHeight, detailLandscapeWidth , detailLandscapeHeight-viewDetailHeaderHeight)];

            viewDetailfinal.curOrientation = UIDeviceOrientationLandscapeLeft;

            [viewDetail addSubview:viewDetailfinal];
            [viewDetailfinal loadCommonView];
        }
        else{
            viewDetailfinal.curOrientation = UIDeviceOrientationLandscapeLeft;
            [viewDetailfinal selfSetFrame:CGRectMake(0, viewDetailHeaderHeight, detailLandscapeWidth, detailLandscapeHeight-viewDetailHeaderHeight)];

        } 
    } 
}

-(IBAction) viewDetailHide{
    [viewDetailfinal releaseMemory];

    viewDetail.hidden=YES;
}

//詳細ビュー

#import <UIKit/UIKit.h>

@interface DetailView : UIView{
    UIScrollView *scrlViewMain;
    UIDeviceOrientation curOrientation;
}
@property UIDeviceOrientation curOrientation;
@property (nonatomic, retain) UIScrollView *scrlViewMain;

-(void) selfSetFrame:(CGRect)frame;
-(void) releaseMemory;
-(void) loadCommonView;
@end



#define scrlViewMainX 0
#define scrlViewMainY 0
#define scrlViewMainWidth 468
#define scrlViewMainPortHeight 749
#define scrlViewMainLandHeight 492

@implementation DetailView
@synthesize scrlViewMain;
@synthesize curOrientation;
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [self setFrame:frame];
        scrlViewMain = [[UIScrollView alloc] init];
    }
    return self;
}
-(void) selfSetFrame:(CGRect)frame{
    [self setFrame:frame];
    if (curOrientation == UIDeviceOrientationPortrait || curOrientation == UIDeviceOrientationPortraitUpsideDown) {
        [self.scrlViewMain setFrame:CGRectMake(scrlViewMainX, scrlViewMainY, scrlViewMainWidth, scrlViewMainPortHeight)];
}
    else{
        [self.scrlViewMain setFrame:CGRectMake(scrlViewMainX, scrlViewMainY, scrlViewMainWidth, scrlViewMainLandHeight)];
}
    [self.scrlViewMain setContentSize:CGSizeMake(scrlViewMainWidth, 1500)];
}
-(void) loadCommonView {
    if (curOrientation == UIDeviceOrientationPortrait || curOrientation == UIDeviceOrientationPortraitUpsideDown) {
        [self.scrlViewMain setFrame:CGRectMake(scrlViewMainX, scrlViewMainY, scrlViewMainWidth, scrlViewMainPortHeight)];
    }
    else{
        [self.scrlViewMain setFrame:CGRectMake(scrlViewMainX, scrlViewMainY, scrlViewMainWidth, scrlViewMainLandHeight)];
}
    [self.scrlViewMain setBackgroundColor:[UIColor redColor]];
    [self addSubview:scrlViewMain];
}
-(void) releaseMemory{
    [scrlViewMain release];
    [self release];
}
@end

私の問題は、詳細ビューを非表示にして、異なる方向で詳細ビューを開くと、ビューが次のようになることです。

ここに画像の説明を入力してください

赤い色はですscrollview。誰かがこのコードをチェックして、何が問題なのか教えてもらえますか?どんな助けでもありがたいです。

4

1 に答える 1

0

自動サイズ変更フラグとマスクを追加する必要があります。これを試して:

scrlViewMain = [[UIScrollView alloc] init];
scrlViewMain.autoresizesSubviews = YES:
scrlViewMain.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

UIViewとそのサブクラスのこれらのプロパティのドキュメントも参照することをお勧めします。マスクを使用して、ビューを上部または下部に対して同じ相対位置に維持するか、使用方法に応じて表示しないようにすることができます。

于 2012-07-07T13:00:20.757 に答える