gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 05:37:36 25 4
gpt4 key购买 nike

所以我试图在单击后移动 UIButton

_addMoreFields 方法在点击按钮后被调用。

_addMoreFieldBtn 是一个全局 UIButton。当我点击它时没有任何反应。

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

如果我保留该代码,按钮将不会移动。

有什么想法吗?

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

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

最佳答案

问题是 iOS 6/Xcode 4.5 中的新项目默认启用“Autolayout”。 Autolayout 是“Springs and Struts”的替代品(但它只适用于 iOS 6)。此功能向优先于您在代码中尝试的移动的 View 添加约束。

所以有三种可能的修复方法:

1) 以编程方式在按钮上创建新约束。 Autolayout 非常强大和灵活……尤其是当您试图同时支持 iPhone 5 和更早机型的占用空间时。您可以通过查看 WWDC 视频找到有关如何执行此操作的更多信息:Introduction to Auto Layout for iOS and OS X

2) 不要使用自动布局。在 Storyboard中选择一个 View ,然后在文件检查器中取消选中“使用自动布局”。

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

@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: 的实际 View 是按钮的父 View ,它可能是也可能不是 self.view)。

关于iphone - 如果在 addSubView 之后调用,UIButton 不会移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12925698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com