今天在写App的登录注册界面,其中登录和注册之间的切换和印象笔记一样
印象笔记登录界面


中间的登录按钮会有一个下移以及更改文字的操作,但是我在加了下移动画之后,再修改按钮的文字,就出现了很奇怪的现象,按钮会先下移然后修改文字之后,又跳回到最初的位置

问题操作
这就奇怪了,看逻辑上一点错误也没有,那怎么会这样呢?

检查了下按钮的类型也是自定义的,那会不会是动画影响的呢?

1
+ (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(4_0);

在block里面,我在setTitle:forState的方法外面,去掉动画的影响

1
2
3
4
[UIView setAnimationsEnabled:NO];
[self.loginButton setTitle:@"注   册" forState:UIControlStateNormal];
[self.loginButton layoutIfNeeded];
[UIView setAnimationsEnabled:YES];

或者

1
2
3
4
[UIView performWithoutAnimation:^{
        [self.loginButton setTitle:@"注   册" forState:UIControlStateNormal];
[self.loginButton layoutIfNeeded];
}];

都还是不行。。。

干脆把动画方法去掉,直接改变按钮的位置再试试。。结果还是一样,那就纳闷了。。

后来找了很久的资料发现,原来是受到了autolayout的影响,因为在广泛开始使用autolayout之后,在storyboard,nib和实现文件里面,我们可能不像以前那样去繁琐的计算坐标了,我们通过自适应的方式,去确定控件的位置

因为我的登录按钮是自适应的,所以在修改了按钮位置后,再修改文字,就会出现这样的问题,但是我打印了很多方法,都没有发现调用,所以不知道系统在设置文字的时候,又调用了哪个方法

我试着调用了修改其他的属性的方法,比如背景色,setImage:forState,这些都没事,凡是调用了title相关的三个设置都会这样。。我就满脸黑线了。。

所以目前能找到的解决办法就是,该按钮用坐标计算的方式添加

如果哪位大神找到更好的解决办法,欢迎留言~