2013-05-06 16 views
7

私はIBでボタンを設定しました。私はIBOutletをセットアップし、オンスクリーンのオブジェクトをそれにリンクさせました。ボタンの位置やサイズをプログラムで変更する方法はありますか?私はあなたがタイトルといくつかのものを変更することができますが、私はそれの位置やサイズを変更する方法を見ていないことを知っています。UIButtonポジションを変更する

enter image description here

今、私はそれに応じてそれの位置を変更したいと思います。出来ますか?はいの場合は、次のコードでボタンの位置を変更しようとしていますが、ヘッダーファイルでは機能しません。

@property (nonatomic, strong) IBOutlet UIButton *mybuttonOutlet; 

実装ファイルで:

-(void)viewDidLoad { 


    screenSizeHeight=[UIScreen mainScreen].bounds.size.height; 


if(screenSizeHeight==568) 

    mybuttonOutlet.frame= CGRect(38, 464 ,157,25); 


if(screenSizeHeight==480) 

    mybuttonOutlet.frame= CGRect(38, 364 ,157,25); 

} 
+0

を、あなたの.xibでこれmyButtonOutletを接続したのですか? –

+0

IBOutletに接続するのを忘れていない限り、これが動作しない理由は何も見つかりません。 – Anupdas

+0

はい、私の.xibにボタンを接続しました – casillas

答えて

14

IBやストーリーボード内のボタンからUse Autolayoutを削除します。あなたは自動レイアウトを有効にして位置を調整したい場合は

+0

私はautolayoutをxib/SB全体からのみ削除できると信じています。 – kraftydevil

2

、あなたは自動レイアウトが有効になっている場合は基本的にあなたがviewDidLayoutSubviews方法で任意のカスタムレイアウト調整を実行する必要があり、この

-(void)viewDidLayoutSubviews { 

    screenSizeHeight=[UIScreen mainScreen].bounds.size.height; 

    if(screenSizeHeight==568) 
     mybuttonOutlet.frame= CGRect(38, 464 ,157,25); 

    if(screenSizeHeight==480) 
     mybuttonOutlet.frame= CGRect(38, 364 ,157,25); 
} 

のようにコードを変更する必要があります

0

このチェックを行ってください。あなたはログ「ボタンがNILである」を取得する場合

-(void)viewDidLoad{ 
    if(self.mybuttonOutlet==nil)NSLog(@"Button is NIL"); 
} 

さて、その後、おそらくあなたは、変数mybuttonOutletにあなたのIBボタンをリンクするのを忘れました。

0
#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 

@end 


#import "ViewController.h" 

@interface ViewController() 
@property(nonatomic, strong) IBOutlet UIButton *theButton; 


// -(IBAction)moveTheButton:(id)sender; 

@end 

@implementation ViewController 
@synthesize theButton; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(IBAction)moveTheButton:(id)sender{ 
    //set default position 
    CGRect btFrame = theButton.frame; 
    btFrame.origin.x = 145; 
    btFrame.origin.y = 285; 
    theButton.frame = btFrame; 

    //position changing 
    btFrame.origin.x += 40; 
    theButton.frame = btFrame; 

    //new size of button 
    CGRect rect=CGRectMake(145, 285, 190, 30); 
    [self.theButton setBounds:rect]; 

} 

@end 
0

私は最終的に制約のために行きました。ボタンの位置を決定する制約のアウトレットを取得し、制約の値を変更します。

self.constBtnSubmitTrailing.constraint = 50.0 

これにより、AutoLayoutを有効にすることができます。

0

私がこれを理解した解決策は、メインView内に新しいViewオブジェクトを作成し、そのビュー内に「動的に変化するオブジェクト」を配置することです(図のように)。

Object hierarchy

それから私は、メインビューで新しいビューを配置する自動レイアウトを使用します。 しかしbugButton:で期待通りに新しいビュー内にあるUIButtonは、位置を変更します。

bugButton.frame.origin = CGPoint(x: newX, y: newY) 
関連する問題