-2

viewDidLoad() メソッドでカスタム ボタンを作成し、Autoresizingmask を設定しました。それはうまくいきます。しかし、ボタンクリックイベントに同じコードを入れると、自動サイズ変更されません。AutoresizingMaskクリック イベント内にアクセスする別の方法はありますか? 前もって感謝します。

ここにコードを入力してください

- (void)viewDidLoad
{
    [super viewDidLoad];
 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button setTitle:@"Show View" forState:UIControlStateNormal];

    button.backgroundColor=[UIColor redColor];
    button.frame=CGRectMake(20, 373, 73, 43);
        button.autoresizingMask=(UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth);
    [self.view addSubview:button];
}


-(IBAction)btn_clicked
{

 UIButton *btn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn setTitle:@"Dynamic Btn" forState:UIControlStateNormal];

enter code here
    btn.backgroundColor=[UIColor yellowColor];
    btn.frame=CGRectMake(20, 150, 73, 43);
    btn.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    [self.view addSubview:btn];
}
4

4 に答える 4

2
  • (void)layoutサブビュー

このメソッドのデフォルトの実装は、iOS 5.1 以前では何もしません。それ以外の場合、デフォルトの実装では、サブビューのサイズと位置を決定するために設定した制約が使用されます。

サブクラスは、必要に応じてこのメソッドをオーバーライドして、サブビューのより正確なレイアウトを実行できます。サブビューの自動サイズ変更および制約ベースの動作が必要な動作を提供しない場合にのみ、このメソッドをオーバーライドする必要があります。実装を使用して、サブビューのフレーム四角形を直接設定できます。

このメソッドを直接呼び出さないでください。レイアウトの更新を強制する場合は、代わりに setNeedsLayout メソッドを呼び出して、次の描画更新の前に実行してください。ビューのレイアウトをすぐに更新したい場合は、layoutIfNeeded メソッドを呼び出します。

AutoresizingMask が機能しない場合の Apple ドキュメントを参照すると、上記のメソッドをオーバーライドする必要があります。AutoresizingMask は、(void)layoutSubviews 内でビュー フレームが変更されたときに機能します。

enter code here

-(void)layoutSubviews
{
    NSLog(@"layoutSubviews called");
    CGRect viewsize=[[UIScreen mainScreen]bounds];
    view.frame=CGRectMake(0, 0, 320, viewsize.size.height);
}

上記のコードを試す AutoresizingMask は iPhone4 と iPhone5 の両方でうまく動作します。

于 2013-05-21T08:50:01.460 に答える
0
  • (void)viewDidLoad

{

[super viewDidLoad];

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[button setTitle:@"Show View" forState:UIControlStateNormal];

button.frame=CGRectMake(20, 73, 173, 43);

[button addTarget:self action:@selector(btn_clicked:) 

forControlEvents:UIControlEventTouchDown];

[self.view addSubview:button];

}

-(IBAction)btn_clicked:(id)送信者

{ UIButton btn = (UIButton )送信者;

[btn setTitle:@"Dynamic" forState:UIControlStateNormal];
[UIView animateWithDuration: 0.4
                 animations: ^{
                     btn.frame=CGRectMake(20, 73, 100, 43);
                     [UIView commitAnimations];
                 }completion: ^(BOOL finished){
                 }];

}

于 2013-05-16T09:08:06.730 に答える
-1

以下のコードを使用してください。

-(IBAction)btn_clicked
{
  UIButton *btn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
  [btn setTitle:@"Dynamic Btn" forState:UIControlStateNormal];
  btn.backgroundColor=[UIColor yellowColor];
  btn.frame=CGRectMake(20, 150, 73, 43);
  btn.autoresizesSubviews = YES;
  self.view.autoresizesSubviews = YES;
self.view.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
btn.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
[self.view addSubview:btn];
}
于 2013-05-16T06:04:40.400 に答える
-1

クリックイベントを介してタイプキャストする必要があると思います。UIButtonあなたのtouchUpInsideイベントをこのようにします

-(IBAction)btn_clicked:(id)sender
{
    UIButton *btn = (UIButton*)sender;
    [btn setTitle:@"Dynamic Btn" forState:UIControlStateNormal];

    //enter code here
    btn.backgroundColor=[UIColor yellowColor];
    btn.frame=CGRectMake(20, 150, 73, 43);
    btn.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    [self.view addSubview:btn];
}

そして、このクリックをこのように呼び出すか 、See if this work....@selector(btn_clicked:)経由で接続します。Interface Builder

于 2013-05-16T06:01:40.280 に答える