2

xib からロードしたカスタム ビューのフレームを変更しようとしています。

ビューの初期化メソッドは次のとおりです。

- (id)initWithUserName:(NSString*)userName andComment:(NSString*)comment
{

    if (self) {
        self = [[[NSBundle mainBundle] loadNibNamed:@"Comment" owner:self options:nil]objectAtIndex:0];

        self.userName = userName;
        self.comment = comment;
        NSLog(@"CREATED");
        NSLog(@"%@, %@",self.userName, self.comment);

        self.userNameButton.tag = -1;

        CGSize constraint = CGSizeMake(240, 2000);
        self.userNameButton.backgroundColor = [UIColor clearColor];
        CGSize sizeOfUsernameText = [self.userName sizeWithFont:[UIFont fontWithName:@"OpenSans-Light" size:12.0] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

        //color converted from #161616 Hex
        [self.userNameButton.titleLabel setTextColor:[StaticMethods colorFromHexString:@"#161616"]];
        [self.userNameButton setTitle:[self.userName stringByAppendingString:@":"] forState:UIControlStateNormal];
        [self.userNameButton.titleLabel setFont:[UIFont fontWithName:@"OpenSans-Light" size:12.0]];
        [self.userNameButton setNeedsDisplay];

        //[self.userNameButton addTarget:self.delegate action:@selector(userNameButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
        //Append appropriate amount so that the usernames can be seen and clickable
        NSString *indentString = @" ";
        CGSize sizeOfWhitespaces = [indentString sizeWithFont:[UIFont fontWithName:@"OpenSans-Light" size:12.0] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
        while (sizeOfWhitespaces.width < sizeOfUsernameText.width) {
            sizeOfWhitespaces = [indentString sizeWithFont:[UIFont fontWithName:@"OpenSans-Light" size:12.0] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
            indentString = [indentString stringByAppendingString: @" "];

        }
        CGSize sizeOfComment = [comment sizeWithFont:[UIFont fontWithName:@"OpenSans-Light" size:12.0] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

        self.commentText.tag = -1;
        self.commentText.text = [indentString stringByAppendingString: self.comment];
        self.commentText.font = [UIFont fontWithName:@"OpenSans-Light" size:12.0];
        [self.commentText setTextColor:[StaticMethods colorFromHexString:@"#161616"]];

    }

    return self;
}

このメソッドは、次のようにビュー コントローラーから呼び出されます。

- (void)viewDidLoad
{
    [super viewDidLoad];
    for(int i = 0; i < self.userNames.count;i++){
        CommentView *view = [[CommentView alloc]initWithUserName:[self.userNames objectAtIndex:i] andComment:[self.comments objectAtIndex:i]];
        [view setDelegate: self];
        [self.view addSubview:view];
        view.frame = CGRectMake(0,100,320,100);


    }

    // Do any additional setup after loading the view from its nib.
}

さて、それが言う行はview.frame = CGRectMake(0,100,320,100);、ビューフレームを変更しようとする場所です。そのコードをビューの中に入れてみました

- (id)initWithUserName:(NSString*)userName andComment:(NSString*)comment

メソッド本体も、たまたま。

明らかに、好みに応じてビューのサイズを変更するのに問題があります。ビューには、インターフェイス ビルダーで表示されるときと同じフレームが常にあります。

私は何を間違っていますか?

編集

viewDidLoad上記の本体をそのviewcontrollerの本体の中に入れてみましたがviewWillAppear、何の進展もありませんでした。

4

2 に答える 2

5

.xib で「Use Autolayout」を無効にすると、これが解決しました。

于 2014-02-17T10:44:01.027 に答える
3

コードを中に入れます

- (void)viewDidLayoutSubviews
{

}

これは、autolayout が実行された後にのみ実行されるデリゲート メソッドです。

于 2013-08-08T07:01:26.320 に答える