2010-11-12 79 views
2

我試圖讓這個與代碼在視圖控制器的視圖中工作:麻煩與autoresizingMask和固定利潤

alt text

,但我無法得到它的工作。

我已經試過

-(void)loadView { 
    UIView *contentView = [[[UIView alloc] init] autorelease]; 
    self.view = contentView; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame = CGRectMake(5,5,0,100); 
    button.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
    [contentView addSubview:button]; 
} 

但按鈕的寬度仍然是上海華盈的寬度......

我敢肯定有一個簡單的解釋。

謝謝大家!

安東尼奧

回答

0

-initWithFrame:爲UIView的指定初始化。在Mac端(NSView),我知道使用-init而不是-initWithFrame:會發生奇怪的事情。也許這是問題?

+0

不幸的是,如果我使用-initWithFrame :,上面的代碼的結果是一樣的。我不能讓按鈕增長,但在邊上留下5 px邊距... – Antonio 2010-11-15 16:05:46

+0

你是在用110的幀寬啓動它嗎?此外,在將相應大小的按鈕添加到內容視圖(可能會自行調整其大小)之前,您已將視圖放入內容視圖中。我不確定這是否是實際發生的情況,但最好在將其添加到另一個之前構建已知幾何圖形的視圖層次結構,這可能會改變它,在添加按鈕之前觸發自動調整大小。我希望這是有道理的。 – 2010-11-15 16:14:10

+0

你是對的。我不得不初始化一個框架。謝謝你的幫助! – Antonio 2010-11-15 17:49:37

0

而是與autoresizingMask標誌的煩心事,我重寫layoutSubviews定製UIView子類:

 
- (void)loadView { 
    self.view = [ContentView view]; 
    self.view.frame = CGRectMake(0, 0, 30, 100); 
} 

其中ContentView被定義爲:

 

@interface ContentView : UIView { 
    UIButton *button; 
} 

+ (id)view; 

@end 

@implementation ContentView { 

+ (id)view { 
    return [[self new] autorelease]; 
} 

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [self addSubview:button]; // Retains the button. 
    } 
    return self; 
} 

- (void)layoutSubviews { 
    const CGFloat margin = 5; 

    CGRect size = self.frame.size; 
    button.frame = CGRectMake(margin, margin, 
     size.width - 2 * margin, 
     size.height - 2 * margin); 
} 

} 

0

試試這個代碼。

- (void)loadView 
{ 
    CGRect screenBounds = [UIScreen mainScreen].bounds; 
    UIView *contentView = [[[UIView alloc] initWithFrame:screenBounds] autorelease]; 
    self.view = contentView; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    button.frame = CGRectMake(5,5,screenBounds.size.width - 10,100); 
    [button setTitle:@"hello" forState:UIControlStateNormal]; 
    button.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
    [contentView addSubview:button]; 
}