何时在iOS 7中使用AutoLayout更新约束

马丁·德·凯泽

在我的应用程序中,我想调整UITextView(self.message)的大小,导航控制器的视图,并且想self.selectedMedia在显示键盘时更改UIScrollView(的位置为此,我正在使用此委托方法:

- (void)keyboardWillShow:(NSNotification *)notification
{
NSDictionary* userInfo = [notification userInfo];

NSTimeInterval animationDuration;
UIViewAnimationCurve animationCurve;
CGRect keyboardFrame;
CGRect navigationControllerFrame = self.navigationController.view.frame;
CGRect textViewFrame = self.message.frame;
CGFloat keyboardHeight;

[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
[[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] getValue:&keyboardFrame];

keyboardHeight = keyboardFrame.size.height;

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:animationDuration];
[UIView setAnimationCurve:animationCurve];

[self.navigationController.view setFrame:CGRectMake(
                                                    navigationControllerFrame.origin.x,
                                                    navigationControllerFrame.origin.y,
                                                    navigationControllerFrame.size.width,
                                                    navigationControllerFrame.size.height - keyboardHeight
                                                    )];
[self.message setFrame:CGRectMake(
                                  textViewFrame.origin.x,
                                  textViewFrame.origin.y,
                                  textViewFrame.size.width,
                                  textViewFrame.size.height - keyboardHeight)];

if (self.selectedMedia.hidden == NO) {
    [self.selectedMedia setFrame:CGRectMake(
                                            self.selectedMedia.frame.origin.x,
                                            self.selectedMedia.frame.origin.y - keyboardHeight,
                                            self.selectedMedia.frame.size.width,
                                            self.selectedMedia.frame.size.height
                                            )];
}

[self.navigationController.view updateConstraints];
[UIView commitAnimations];
}

运行此代码时,出现错误,无法满足约束条件:

2013-10-11 14:03:52.532 PoC[78199:a0b] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
"<NSLayoutConstraint:0xe5502d0 V:[UITextView:0xf26da00(380)]>",
"<NSLayoutConstraint:0x8b93620 V:|-(0)-[UITextView:0xf26da00]   (Names: '|':UIView:0x8b978f0 )>",
"<NSLayoutConstraint:0x8b984c0 V:[UIScrollView:0x8b8f570]-(0)-|   (Names: '|':UIView:0x8b978f0 )>",
"<NSLayoutConstraint:0x8b98520 V:[UITextView:0xf26da00]-(0)-[UIScrollView:0x8b8f570]>",
"<NSAutoresizingMaskLayoutConstraint:0x8b9acf0 h=--& v=--& V:[UIView:0x8b978f0(244)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0xe5502d0 V:[UITextView:0xf26da00(380)]>

我不知道为什么UITextView仍然具有380的高度。该语句是否不[self.navigationController updateConstraints]基于给定的约束来调整高度?提交动画后是否应更新约束?还是我还有其他事情要忽略?

尼古拉·拉吉奇(Nikola Lajic)

使用自动版式时,您不应该设置视图的框架。相反,您应该调整约束,通常是'constant'属性。

在您的情况下,您正在更改视图的高度,并且在此过程中打破了约束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在iOS 7中更新约束后获取“无法同时满足约束”

来自分类Dev

何时在iOS中刷新数据

来自分类Dev

iOS:同时更新约束和框架

来自分类Dev

以编程方式更新约束iOS

来自分类Dev

iOS 7上的NDA何时过期?

来自分类Dev

何时覆盖iOS方法时使用Super

来自分类Dev

tableviewcell以编程方式使用AutoLayout更新约束

来自分类Dev

iOS自动布局界面约束何时得到执行?

来自分类Dev

Xamarin.iOS中的NSTimer与Timer-何时使用什么?

来自分类Dev

iOS 7何时关闭我的应用程序?

来自分类Dev

如何知道iOS中何时满足并行HTTP请求?

来自分类Dev

何时在IOS中致电Google加上静默身份验证

来自分类Dev

如何检测iOS 9中何时关闭弹出窗口

来自分类Dev

如何检测何时在Swift iOS Xcode中更改UIView大小?

来自分类Dev

知道动画何时从iOS中抽象出来的动画

来自分类Dev

何时在iOS应用中打开sqlite3_close

来自分类Dev

iOS 中的语音识别何时受限,即 requestAuthorization 返回 `SFSpeechRecognizerAuthorizationStatusRestricted`

来自分类Dev

检测何时使用iOS面包屑返回应用

来自分类Dev

Swift iOS,何时需要使用mediaTypes kUTTypeImage

来自分类Dev

Objective-C / Swift(iOS)何时在View / ViewController工作流程中应用自动约束?

来自分类Dev

何时在Typescript中使用类型约束?

来自分类Dev

iOS7和iOS8:如何检测用户何时拒绝推送通知请求

来自分类Dev

iOS-对何时在我的应用程序中使用Core Data感到困惑

来自分类Dev

iOS7的UICollectionViewCell子类中的约束未更新

来自分类Dev

如何使用Masonry DSL更新约束?

来自分类Dev

在iOS 7下,如何即时隐藏和显示状态栏(无论何时)

来自分类Dev

在iOS 7上通过锁屏检测应用何时变为活动状态

来自分类Dev

iOS 7是否有办法知道MKTileOverlay何时完成加载图块?

来自分类Dev

如何检测iOS9中基于Game Center回合的比赛何时结束?

Related 相关文章

  1. 1

    在iOS 7中更新约束后获取“无法同时满足约束”

  2. 2

    何时在iOS中刷新数据

  3. 3

    iOS:同时更新约束和框架

  4. 4

    以编程方式更新约束iOS

  5. 5

    iOS 7上的NDA何时过期?

  6. 6

    何时覆盖iOS方法时使用Super

  7. 7

    tableviewcell以编程方式使用AutoLayout更新约束

  8. 8

    iOS自动布局界面约束何时得到执行?

  9. 9

    Xamarin.iOS中的NSTimer与Timer-何时使用什么?

  10. 10

    iOS 7何时关闭我的应用程序?

  11. 11

    如何知道iOS中何时满足并行HTTP请求?

  12. 12

    何时在IOS中致电Google加上静默身份验证

  13. 13

    如何检测iOS 9中何时关闭弹出窗口

  14. 14

    如何检测何时在Swift iOS Xcode中更改UIView大小?

  15. 15

    知道动画何时从iOS中抽象出来的动画

  16. 16

    何时在iOS应用中打开sqlite3_close

  17. 17

    iOS 中的语音识别何时受限,即 requestAuthorization 返回 `SFSpeechRecognizerAuthorizationStatusRestricted`

  18. 18

    检测何时使用iOS面包屑返回应用

  19. 19

    Swift iOS,何时需要使用mediaTypes kUTTypeImage

  20. 20

    Objective-C / Swift(iOS)何时在View / ViewController工作流程中应用自动约束?

  21. 21

    何时在Typescript中使用类型约束?

  22. 22

    iOS7和iOS8:如何检测用户何时拒绝推送通知请求

  23. 23

    iOS-对何时在我的应用程序中使用Core Data感到困惑

  24. 24

    iOS7的UICollectionViewCell子类中的约束未更新

  25. 25

    如何使用Masonry DSL更新约束?

  26. 26

    在iOS 7下,如何即时隐藏和显示状态栏(无论何时)

  27. 27

    在iOS 7上通过锁屏检测应用何时变为活动状态

  28. 28

    iOS 7是否有办法知道MKTileOverlay何时完成加载图块?

  29. 29

    如何检测iOS9中基于Game Center回合的比赛何时结束?

热门标签

归档