我有一个按钮,在IB成立。 我有一个IBOutlet设置和链接到它的屏幕上的对象。 有没有一种方法以编程方式更改按钮的位置和/或大小? 我知道你可以更改标题和一些东西,但我不知道如何改变它的位置和大小。
现在,我想相应地改变它的位置。 可能吗? 如果是的话,请让我知道怎么回事,因为我想改变我在下面的代码按钮的位置,但它并没有在头文件的工作。
@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);
}
删除Use Autolayout
从IB或故事板的按钮。
如果你想调整启用了自动布局位置,你必须改变你这样的代码
-(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);
}
基本上你需要执行viewDidLayoutSubviews方法的任何自定义布局调整如果启用了自动布局
#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
我最终去了约束。 获取确定该按钮的位置的约束条件的出口(顶部,底部,导致,尾随)和改变约束(一个或多个)值(S)。
self.constBtnSubmitTrailing.constraint = 50.0
这使您可以保持启用自动版式。
我想通了对此的解决方案是创建新的View对象主要查看里面,把我的“动态变化的对象”是视图内(如上图)。
对象层次
然后,我用自动布局定位在主视图中的新景观。 但bugButton:UIButton的是新的视图中,改变位置与预期:
bugButton.frame.origin = CGPoint(x: newX, y: newY)
请执行此检查。
-(void)viewDidLoad{
if(self.mybuttonOutlet==nil)NSLog(@"Button is NIL");
}
现在,如果你得到的日志“按钮NIL”,那么很可能你忘了你的IB按钮链接到您的变量mybuttonOutlet。