0

私のメインviewControllerには、これがあります:

// .h
#import "YNSlidingMenu.h"

@interface YNAddNoteViewController : UIViewController
@property (nonatomic, strong) YNSlidingMenu *slidingMenu;
@end

// .m
- (void)setUpSlidingMenu{
    _slidingMenu = [[YNSlidingMenu alloc]init];
    [self.view addSubview:_slidingMenu];
}

YNSlidingMenu.m には、次のようなものがあります。

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self configureView];
    }

    return self;
}

- (id)init{
    self = [super init];
    if (self) {
        NSLog(@"init");
    }

    return self;
}

- (void)configureView{
    NSLog(@"configureView");
    self.rect = CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, 40);
}

YNSlidingMenu は、その内容に基づいてフレームを取得するため、viewController でinitWithFrame.

私は何をする必要がありますか?NSLog(@"init");呼び出されません。viewController からフレームを設定せずにカスタム ビューを初期化するにはどうすればよいですか?

4

2 に答える 2

0

[self configureView] を initWithFrame: メソッドの外に移動し、ビューを初期化するときに呼び出し init として init メソッドに移動します。少なくとも、サンプル コードはこのようになっています。

于 2013-09-21T19:27:05.123 に答える
0

I don't think it can get its frame base on its content, unless of cause you're using auto layout. A proper approach is that you init you view with CGRectZero. Then set the frame latter when you are ready. Or you can adopting auto layout.

于 2013-09-21T19:13:44.687 に答える