【问题标题】:UIButton Changing PositionUIButton 改变位置
【发布时间】:2013-04-30 14:43:34
【问题描述】:

我在 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);

}

【问题讨论】:

  • 您是否将此 myButtonOutlet 与您的 .xib 连接?
  • 除非您忘记连接 IBOutlet,否则我找不到任何原因导致这不起作用。
  • 是的,我将按钮连接到我的 .xib
  • 只是一个疯狂的猜测,您是否将多个插座连接到同一个按钮?
  • 我的按钮不只有一个出口。

标签: ios xcode uibutton iphone-5


【解决方案1】:

从 IB 或情节提要的按钮中删除 Use Autolayout

【讨论】:

  • 我相信您只能从整个 xib/SB 本身中删除自动布局 - 这对我也有用。
【解决方案2】:

如果您想在启用自动布局的情况下调整位置,则必须像这样更改代码

-(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 方法中执行任何自定义布局调整

【讨论】:

    【解决方案3】:
    #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
    

    【讨论】:

      【解决方案4】:

      我最终选择了约束。获取确定按钮位置(顶部、底部、前导、尾随)的约束的出口并更改约束值。

      self.constBtnSubmitTrailing.constraint = 50.0
      

      这样您就可以保持启用自动布局。

      【讨论】:

        【解决方案5】:

        为此我想出的解决方案是在主视图中创建新的视图对象,并将我的“动态变化的对象”放入该视图中(如图所示)。

        Object hierarchy

        然后我使用自动布局将新视图定位在主视图中。 但是新视图中的 bugButton:UIButton 会按预期更改位置:

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

        【讨论】:

          【解决方案6】:

          请执行此检查。

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

          现在,如果您收到日志“Button is NIL”,那么您可能忘记将 IB 按钮链接到变量 mybuttonOutlet。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-12
            • 2012-09-08
            • 1970-01-01
            相关资源
            最近更新 更多