如果在addSubView之后调用,UIButton不会移动

编程入门 行业动态 更新时间:2024-10-23 22:24:37
本文介绍了如果在addSubView之后调用,UIButton不会移动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

因此,我试图在单击UIButton后移动它.

So I am trying to move a UIButton after it is clicked.

单击按钮后将调用_addMoreFields方法.

The _addMoreFields method is called after the button is clicked.

_addMoreFieldBtn是全局UIButton.当我单击它时,什么也没有发生.

_addMoreFieldBtn is a global UIButton. When I click it nothing happens.

奇怪的是,如果我注释掉addSubView代码,则按钮会移动.

The strange part is if I comment out the addSubView code then the button moves.

如果我保留该代码,则按钮不会移动.

If I keep that code the button doesn't move.

有什么想法吗?

-(void)movePlusButton { NSLog(@"Moving button"); [UIButton beginAnimations:nil context:nil]; [UIButton setAnimationDuration:0.3]; _addMoreFieldsBtn.center = CGPointMake(30,30); [UIButton commitAnimations]; } - (IBAction)addMoreFields:(id)sender { CGRect currentBtnFrame = [(UIButton *)sender frame]; CGPoint org = currentBtnFrame.origin; UILabel *whoWasIn = [[UILabel alloc] initWithFrame:CGRectMake(110, org.y, 85, 21)]; whoWasIn.text = @"test"; UITextField *whoWasInField = [[UITextField alloc] initWithFrame:CGRectMake(59, whoWasIn.frame.origin.y+40, 202, 30)]; whoWasInField.placeholder = @"test2"; UILabel *with = [[UILabel alloc] initWithFrame:CGRectMake(136, whoWasInField.frame.origin.y+40, 49, 21)]; with.text = @"with"; whoWasInField.borderStyle = UITextBorderStyleRoundedRect; UITextField *withField = [[UITextField alloc] initWithFrame:CGRectMake(59, with.frame.origin.y+40, 202, 30)]; withField.placeholder = @"test3"; withField.borderStyle = UITextBorderStyleRoundedRect; [_homeView addSubview:whoWasIn]; [_homeView addSubview:with]; [_homeView addSubview:whoWasInField]; [_homeView addSubview:withField]; [self movePlusButton]; }

注意:我也尝试过更改框架,但是遇到了同样的问题.它从我放置到现有位置的新位置开始进行动画制作.

NOTE: I also tried changing the frame but I get the same issue. It starts animating from the new location I put to the existing spot.

推荐答案

问题是iOS 6/Xcode 4.5中的新项目默认情况下启用了自动布局".自动布局是弹簧和支柱"的替代品(但仅适用于iOS 6).此功能向视图添加了约束,该约束优先于您在代码中尝试的移动.

The issue is that new projects in iOS 6 / Xcode 4.5 have "Autolayout" enabled by default. Autolayout is a replacement for "Springs and Struts" (but it only works iOS 6). This feature adds constraints to a view which take precedence over the move you were attempting in your code.

因此,有三个可能的解决方法:

So there are three possible fixes to this:

1)以编程方式在按钮上创建新的约束.自动布局功能强大而灵活……尤其是当您试图同时支持iPhone 5和更早型号的设备时.您可以通过查看WWDC视频找到有关如何执行此操作的更多信息:简介到iOS和OS X的自动版式

1) Create new constraints on the button programmatically. Autolayout is pretty powerful and flexible... especially if you are trying to support the footprint of both the iPhone 5 and earlier models. You can find more info on how to do this by checking out the WWDC video: Introduction to Auto Layout for iOS and OS X

2)不要使用自动版式.在情节提要中选择一个视图,然后在文件检查器中取消选中使用自动布局".

2) Don't use Autolayout. Select a view in your Storyboard, and in the File Inspector, uncheck "Use Autolayout."

3)为按钮上的每个约束创建IBOutlet.然后,在移动按钮之前,请删除这些约束:

3) Create IBOutlets for each of the constraints on the button. Then before you move the button, remove those constraints:

@interface MyViewController : UIViewController @property (weak, nonatomic) IBOutlet UIButton *addMoreFieldsBtn; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *hConstraint; @property (weak, nonatomic) IBOutlet NSLayoutConstraint *vConstraint; - (IBAction)addMoreFields:(id)sender; @end

和...

-(void)movePlusButton { NSLog(@"Moving button"); [self.view removeConstraint:self.hConstraint]; [self.view removeConstraint:self.vConstraint]; [UIButton beginAnimations:nil context:nil]; [UIButton setAnimationDuration:0.3]; _addMoreFieldsBtn.center = CGPointMake(30,30); [UIButton commitAnimations]; }

(您需要在其上调用removeConstraints:的实际视图是按钮的父视图,它可以是self.view,也可以不是.)

(the actual view you need to call removeConstraints: on is the parent view of the button, which may or may not be self.view).

更多推荐

如果在addSubView之后调用,UIButton不会移动

本文发布于:2023-10-18 10:49:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1504012.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:addSubView   UIButton

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!