gpt4 book ai didi

ios - ios 中 UITextField 的自动布局问题

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

我在 Storyboard中创建了 UITextField。并添加了它的约束。我想要 UITextField 左侧的搜索图标。添加搜索图标的代码如下:

self.searchTextField.leftView = searchIconImage;
self.searchTextField.leftViewMode = UITextFieldViewModeAlways;
[self.searchTextField addTarget:self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];

我的应用程序在 iOS8 上运行良好,但在 iOS7 上却崩溃了。错误如下:

Assertion failure in -[UITextField layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2935.138/UIView.m:8794 2014-11-05 12:54:33.377 WattUp[1722:60b] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. UITextField's implementation of -layoutSubviews needs to call super.'

最佳答案

所以我几天前也遇到了同样的错误。结果我试图在我的 UITextfield 子类中布局 subview ,在它们上设置属性,移动它们等等,但从未明确告诉 View 自行布局(即调用 [self layoutIfNeeded]).

iOS 8 似乎强制 View 布局其所有 subview ,然后在其上配置约束。如果您使用自动布局,iOS 7 不会,并且需要您明确告诉 View 在您更改时重绘它们的 subview 。

在我的例子中,我对 UITextField 进行了子类化,并在旁边添加了一个标签。我通过向 UITextfield 添加约束来配置标签的框架。我可以在类里面调用的公共(public)方法之一是

- (void)setLabelText:(NSString *)newText{
self.sideLabel.text = newText;
}

当出现包含我的子类文本字段的 View Controller 时,这导致我的应用程序崩溃。通过添加 layoutIfNeeded 在 iOS7 和 iOS8 中一切正常。

- (void)setLabelText:(NSString *)newText{
self.sideLabel.text = newText;
[self layoutIfNeeded];
}

每次更改子类中的 View 的一部分时都需要调用它。这包括添加 subview 时的设置,更改 View 属性时的任何设置。在改变 View 的函数返回之前,在 View 上调用 layoutIfNeeded。这似乎适用于一些标准的 UI 控件,包括 UITextfield、UITableView 和 UICollectionView,尽管我确信还有其他控件。我希望这已经足够清楚并有助于解决您的问题。

您遇到的错误不是很有用,甚至不适用于我的情况。虽然我收到了完全相同的错误,但我的 View 都没有实现 layoutSubviews,因此都使用了 [super layoutSubviews] 方法。

关于ios - ios 中 UITextField 的自动布局问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26751801/

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