我正在将错误消息添加到登录屏幕。
虽然代码运行良好,并且执行我希望它执行的操作。它会在执行时导致约束错误。
以下是受影响的约束:
self.view.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|[topBar]-32-[emailInputField]-32-[passwordInputField]-32-[signInButton]-16-[resetPasswordButton]-[signUpButton]", options: nil, metrics: nil, views: viewsDictionary))
self.view.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|[topBar]-32-[emailIconBox]-32-[passwordIconBox]", options: nil, metrics: nil, views: viewsDictionary))
下面是导致errorView出现的函数。
// sign in button function
func signIn(sender: UIButton) {
self.view.endEditing(true)
if emailInputField.text.isEmpty {
println("NO EMAIL")
errorLabel.attributedText = UILabel.ErrorMessage("Form fields cannot be empty!")
var viewsDictionary = [ "topBar":topBar,
"errorView":errorView,
"errorLabel":errorLabel,
"emailInputField":emailInputField,
"emailIconBox":emailIconBox,
"passwordInputField":passwordInputField,
"passwordIconBox":passwordIconBox,
"signInButton":signInButton,
"resetPasswordButton":resetPasswordButton,
"signUpButton":signUpButton]
self.view.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|[topBar]-16-[errorView]-16-[emailInputField]-32-[passwordInputField]-32-[signInButton]-16-[resetPasswordButton]-[signUpButton]", options: nil, metrics: nil, views: viewsDictionary))
self.view.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:|[topBar]-16-[errorView]-16-[emailIconBox]-32-[passwordIconBox]", options: nil, metrics: nil, views: viewsDictionary))
self.view.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"V:[errorView(50)]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary))
}
}
如何在不破坏约束的情况下更改约束?
我尝试self.view.update约束()-但是什么也没有做。我还尝试在添加约束之前删除它们,但是仍然有一个错误。
任何帮助都将不胜感激!
编辑:
我找到了一个Objective-c解决方案,约束一个带有常量的变量,然后更改常量。-我尝试将其翻译为swift。运行它时没有错误,但我的errorView不显示(高度不会改变)
这是我尝试的:
>
我在ViewController类中声明了变量(在viewddLoad之前)
var errorViewHeight=NSLayoutConstraint()
在函数的开头,我指定了它。
errorViewHeight=NSLayoutConstraint(项目:errorView,属性:NSLayoutAtcm。高度,相关者:NSLayoutRelation。等于,toItem:nil,属性:NSLayoutAtcm。NotAnAtment,乘数:1.0,常量:0)
最后,在if语句返回true后,我尝试设置它的动画。
UIView。动画宽度(0.2,动画:{()-
编辑:
以下是错误消息:
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:0x170089e20 V:[UIView:0x174191780(0)]>",
"<NSLayoutConstraint:0x170089fb0 V:[UIView:0x174191780(50)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x170089fb0 V:[UIView:0x174191780(50)]>
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.
我的回答我想补充的是,有些人有在viewddLayout方法中设置约束的习惯,所以当您更改或编辑任何约束时,它会给你这个错误,因为viewddLayout的工作方式不像viewddLoad或其他功能。所以我的建议是,如果您正在做这样的事情,请使用viewddEmerar而不是viewddLayout,最好是使用viewddLoad。
您可以通过添加以下扩展来更改任何约束,如果要部署到多个设备,这将是非常好的:
extension UIView
{
func updateHieghtForView()
{
var constant = CGFloat()
// change the constant by switching device type by screen size
let allConstraints = self.constraints
for heightConstraint in allConstraints
{
if heightConstraint.firstAttribute == .Height
{
self.removeConstraint(heightConstraint)
}
}
let layOutConstaint = NSLayoutConstraint(item: self,
attribute: .Height,
relatedBy: .Equal,
toItem: nil,
attribute:.Height,
multiplier: 1,
constant: constant)
self.addConstraint(layOutConstaint)
self.updateConstraints()
}
}
我想出了如何使用常量更改约束。
在viewController类中,我定义了约束:
var errorViewHeight:NSLayoutConstraint!
在viewDidLoad中,我指定并将其添加到UIView中
errorViewHeight = NSLayoutConstraint(item:errorView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier:1.0, constant:0)
errorView.addConstraint(errorViewHeight)
从那时起,我可以使用以下代码行正确更改高度
errorViewHeight.constant = 50
希望这能帮助寻找同样问题的人。
我有两张桌子。第一个是人口;第二个是空的。 我希望第二个有一个外键,它引用第一个中的一列。 null 架构: 填充。为空。 不能成为的外键: MySQL没有提供错误的原因;不返回: 我拥有所需的数据库权限。 我已经仔细检查了列(甚至表)是否具有相同的排序规则(字符集不适用于INT列): MySQL无法添加外键约束 MySQL:错误1215(HY000):无法添加外键约束 无法添加外键约束-MySQ
问题内容: 我发现了有关该错误的一些线索。但是所有解决方案都不适合我。 我为用户表创建了2个表,为文章创建了1个表。现在,我要存储创建文章的用户和最后一个修饰符的用户。 我收到以下错误,但我不明白为什么要为此添加索引。 错误代码:1822。无法添加外键约束。引用表“ users”中约束“ fk_articles_users1”的缺少索引 我活跃 但这不会显示任何错误。 问题答案: 不能引用,因为出
我希望将clob列的约束更改为约束。但是,当尝试 或 我做错了什么?在这种情况下,我也必须使用临时栏吗?我知道使用temp列将数据类型从clob更改为varchar2的场景,但这里我只想更改约束。为什么这是不可能的? 提前感谢!
问题内容: 在Derby服务器中,如何使用模式的系统表中的信息来创建select语句,以便检索每个表的约束名称? 问题答案: 相关手册是《Derby参考手册》。有许多版本可用:10.13是2017年4月的最新版本,但在2009年5月是10.3的最新版本。 原始答案 由于Derby的最新版本要求系统目录表的前缀在kiwicomb123的注释中引用了10.13 ,因此可以修改查询以使用显式的JOIN表
主要内容:NOT NULL 约束,DEFAULT 约束,UNIQUE 约束,PRIMARY KEY 约束,CHECK 约束,删除约束约束是在表的数据列上强制执行的规则。这些是用来限制可以插入到表中的数据类型。这确保了数据库中数据的准确性和可靠性。 约束可以是列级或表级。列级约束仅适用于列,表级约束被应用到整个表。 以下是在 SQLite 中常用的约束。 NOT NULL 约束:确保某列不能有 NULL 值。 DEFAULT 约束:当某列没有指定值时,为该列提供默认值。 UNIQUE 约束:确保某
PostgreSQL 约束用于规定表中的数据规则。 如果存在违反约束的数据行为,行为会被约束终止。 约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。 约束确保了数据库中数据的准确性和可靠性。 约束可以是列级或表级。列级约束仅适用于列,表级约束被应用到整个表。 以下是在 PostgreSQL 中常用的约束。 NOT NULL