AutoLayout 抱怨 2 个没有边框的 UITextFields 的约束 [英] AutoLayout complains about constraints for 2 UITextFields with no borders

查看:16
本文介绍了AutoLayout 抱怨 2 个没有边框的 UITextFields 的约束的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试构建只有 2 个文本字段和 2 个按钮的登录视图.我正在应用添加缺少的约束"属性,以便 Xcode 将相应的约束应用于情节提要中我的 LoginViewController 中的所有元素.我将我的应用程序限制为仅在纵向模式下运行,因此我使用的是wCompact hRegular"设置.

I am trying to build my login view that has only 2 TextFields, and 2 buttons. I am applying the "Add Missing Constraints" property so that Xcode applies the corresponding constraints to all the elements in my LoginViewController in the storyboard. I am restricting my app to run only in portrait mode, so I am using the "wCompact hRegular" setup.

每当我运行我的应用程序并使用 segue 转换到我的 LoginViewController 时,我的应用程序只显示一个文本字段,并在控制台中显示一堆关于自动布局的错误.

Whenever I run my app and transition to my LoginViewController with a segue, my app displays only one textfield, and shows a bunch of errors in the console regarding autolayout.

我想要实现的功能是提供一个类似于新 Parse 登录屏幕的登录屏幕.那是有两个没有边框的文本字段,并且只显示用户名文本字段的底部边框,因此它可以将其与密码文本字段分开,如下所示:

The functionality I am trying to achieve is to come up with a login screen that resembles the new Parse login screen. That is having two textfields with no borders and only the bottom border of the username textfield showing so it can divide it from the password textfield, like so:

到目前为止,这是我的应用运行时的外观:

So far, this is how my app looks when it runs:

它应该是这样的:

这是控制台中出现的错误:

Here's the error that appears in the console:

2015-06-14 20:40:21.480 MyApp[71158:3600335] 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) 
(
    "<_UILayoutSupportConstraint:0x7f9ff3f6d260 V:[_UILayoutGuide:0x7f9ff3f7a140(20)]>",
    "<_UILayoutSupportConstraint:0x7f9ff3f087a0 V:|-(0)-[_UILayoutGuide:0x7f9ff3f7a140]   (Names: '|':UIView:0x7f9ff3f7a030 )>",
    "<_UILayoutSupportConstraint:0x7f9ff3f24730 V:[_UILayoutGuide:0x7f9ff3f7a2a0(0)]>",
    "<_UILayoutSupportConstraint:0x7f9ff3f71640 _UILayoutGuide:0x7f9ff3f7a2a0.bottom == UIView:0x7f9ff3f7a030.bottom>",
    "<NSLayoutConstraint:0x7f9ff3f6b9e0 V:[UITextField:0x7f9ff3f782a0]-(NSSpace(8))-[UITextField:0x7f9ff3f7a3d0]>",
    "<NSLayoutConstraint:0x7f9ff3f58a40 V:[UIButton:0x7f9ff3f7ab00'Login']-(331)-[_UILayoutGuide:0x7f9ff3f7a2a0]>",
    "<NSLayoutConstraint:0x7f9ff3f28b60 V:[_UILayoutGuide:0x7f9ff3f7a140]-(237)-[UITextField:0x7f9ff3f782a0]>",
    "<NSLayoutConstraint:0x7f9ff3f34180 V:[UIButton:0x7f9ff3f7ad20'I forgot my password']-(49)-[UIButton:0x7f9ff3f7ab00'Login']>",
    "<NSLayoutConstraint:0x7f9ff3f341d0 V:[UITextField:0x7f9ff3f7a3d0]-(35)-[UIButton:0x7f9ff3f7ad20'I forgot my password']>",
    "<NSLayoutConstraint:0x7f9ff3f29f90 V:[UITextField:0x7f9ff3f782a0(30)]>",
    "<NSLayoutConstraint:0x7f9ff3f055a0 V:[UIButton:0x7f9ff3f7ad20'I forgot my password'(30)]>",
    "<NSLayoutConstraint:0x7f9ff3f055f0 V:[UIButton:0x7f9ff3f7ab00'Login'(30)]>",
    "<NSLayoutConstraint:0x7f9ff3cc3b80 'UIView-Encapsulated-Layout-Height' V:[UIView:0x7f9ff3f7a030(667)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7f9ff3f055f0 V:[UIButton:0x7f9ff3f7ab00'Login'(30)]>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

有谁知道如何解决这个问题以及为什么它不起作用?我什至尝试手动手动添加所有约束,但它不起作用.此外,如果我给我的文本字段设置圆角边框并使它们比情节提要的全宽略小一点,它就会达到预期的效果.

Does anyone know how to fix this and why it does not work? I even tried manually adding all the constraints manually, but it did not work. Also, if I give my textfields rounded borders and make them a little smaller than the storyboard's full width, it does what it's expected to do.

提前感谢您的帮助.

干杯!

推荐答案

添加缺少的约束"并不总是添加约束的好主意.相反,您应该总是更喜欢手动添加约束...

"Add Missing Constraints" is not always a good idea to add constraints..rather you should always prefer to add constraints manually...

这是您的 UI 的图像...我使用了 wAnyhAny 布局,因为这是为通用设备添加约束的好习惯...

Here is the image for your UI...I used wAnyhAny layout as it is good practice for add constraints for universal devices...

我对文本字段使用了简单的宽度约束,而不是您应该 Equal width 到超级视图并添加乘数以根据设备宽度调整宽度

I used simply width constraint for textfield, rather you should Equal width to super view and add multiplier to resize width according to device width

这是不同尺寸的输出图像...

Here is the output image in different sizes...

这篇关于AutoLayout 抱怨 2 个没有边框的 UITextFields 的约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆