2013-05-06 17 views
7

Ich habe eine Schaltfläche in IB eingerichtet. Ich habe ein IBOutlet eingerichtet und das Onscreen-Objekt verknüpft. Gibt es eine Möglichkeit, die Position und/oder Größe dieser Schaltflächen programmgesteuert zu ändern? Ich weiß, dass Sie den Titel und einige Dinge ändern können, aber ich sehe nicht, wie man seine Position oder Größe ändert.UIButton Ändern der Position

enter image description here

Nun möchte Ich mag die Position entsprechend ändern. Ist es möglich? Wenn ja, lass es mich wissen wie, da ich versuche, die Position meiner Schaltfläche im folgenden Code zu ändern, aber es funktioniert nicht in der Header-Datei.

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

In der Implementierungsdatei:

-(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

haben Sie diese myButtonOutlet mit Ihrem .xib verbinden? –

+0

Ich finde keinen Grund, warum dies nicht funktioniert, wenn Sie vergessen haben, das IBOutlet zu verbinden. – Anupdas

+0

Ja, ich habe meinen Knopf an meine .xib angeschlossen – casillas

Antwort

14

entfernen Use Autolayout vom Button in IB oder Storyboard.

+0

Ich glaube, Sie können das automatische Layout nur von der gesamten xib/SB selbst entfernen - was auch für mich funktionierte. – kraftydevil

2

Wenn Sie Positionen anpassen möchten mit Automatische Anordnung aktiviert ist, werden Sie Ihren Code wie dieser

-(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); 
} 

Grundsätzlich Sie benutzerdefinierte Layout Anpassungen in viewDidLayoutSubviews Methode ausführen müssen sich ändern müssen, wenn Automatische Anordnung aktiviert ist

0

Bitte führen Sie diese Überprüfung durch.

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

Nun, wenn Sie das Protokoll bekommen „Button ist NIL“, dann wahrscheinlich vergessen Sie Ihre IB-Taste, um Ihre Variable mybuttonOutlet zu verknüpfen.

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

Ich ging schließlich für die Einschränkungen. Ermitteln Sie eine Ableitung der Einschränkungen, die die Position der Schaltfläche bestimmen (oben, unten, vorangestellt, nachlaufend), und ändern Sie den/die Constraint (s) -Wert (e).

self.constBtnSubmitTrailing.constraint = 50.0 

Damit können Sie AutoLayout aktiviert halten.

0

Die Lösung, die ich dafür herausgefunden habe, besteht darin, ein neues View-Objekt in der Hauptansicht zu erstellen und meine "sich dynamisch ändernden Objekte" in diese View einzufügen (wie im Bild gezeigt).

Object hierarchy

Dann benutze ich Auto-Layout, um die neue Ansicht in der Hauptansicht zu positionieren. Aber bugButton: UIButton, die in der neuen Ansicht angezeigt wird, ändert sich Position wie erwartet:

bugButton.frame.origin = CGPoint(x: newX, y: newY) 
Verwandte Themen