我曾经使用自动布局添加新约束来对超级视图/相对视图进行简单约束,如下所示(对于 loooong 时间):
但是,最近更新到最新的 xcode(11.3.3 或 11.3/11C29)后,我遇到了这个奇怪的问题:当我设置常量 = 0 时,它们总是以不需要的方式生成约束,如下所示:
似乎默认值在某种程度上是 20 并且让我的观点看起来如此错误(0 与 20 相比?)
如果我通过像这样编辑约束来解决这个问题:
然后它会再次更正(图像是在编辑约束之后,在编辑之前显示常量 = Standard)
我什至不知道如何描述这个问题,但是我如何解决这个新问题add new constraint以使用我的愿望点而不是标准/默认值?
更新:
它似乎只发生在约束超级视图时。不知道如何修复tho。
2020 年 4 月 1 日更新:
Xcode11.4 修复了这个问题。
我想知道iPhone上默认系统字体的名称.它曾经是"HelveticaNeue"我猜,但现在呢?
长话短说,我想创建一个XIB文件,其中包含:
一个看法.在该视图中,它有很多东西和tableView.(连接数据源,委托给文件所有者).该视图是XIB文件的主视图.
自定义单元格,(用作tableView的原型单元格,因为XIB不支持原型tableView).
我怎么能实现这两个目标?另外,我想知道同样适用于UICollectionView.
我创建了这两个,将它加载到主视图(主视图在主故事板中).但是tableView没有按预期加载自定义单元格.单元格只是空白,看起来不像它在笔尖中设计的那样.
编辑1
这是我如何将nib注册到storyboard中的主视图:
- (UIView *)buildViewFromViewControllerClass:(Class)viewControllerClass
{
id viewController = [[viewControllerClass alloc] initWithNibName:NSStringFromClass(viewControllerClass) bundle:nil];
[viewController view].frame = self.containerView.bounds;
[self addChildViewController:viewController];
return [viewController view];
}
Run Code Online (Sandbox Code Playgroud)
我有很多viewControllers,所以我发现这是添加VC的最佳方式.
关于上面描述中的nib,我只是使用常规初始化:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// init cell
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
if (!cell) {
cell = [[PaymentCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CustomCell"];
}
return cell;
}
Run Code Online (Sandbox Code Playgroud)
如果在视图中执行了load方法,我将nib注册到tableView,它会崩溃[tableView dequeueResuableCell...].注册码:
- (void)viewDidLoad
{
[super viewDidLoad];
// [self.tableView registerNib:[UINib nibWithNibName:self.nibName bundle:nil]
// forCellReuseIdentifier:@"CustomCell"];
// I'm commenting it, because …Run Code Online (Sandbox Code Playgroud) 我看不出这些代码行有什么问题.为什么不能解析?
[NSPredicate predicateWithFormat:@"(username CONTAINS[cd] %1$@) || "
"(userId CONTAINS[cd] %1$@) || "
"(firstname CONTAINS[cd] %1$@) || "
"(lastname CONTAINS[cd] %1$@)", searchString]"
Run Code Online (Sandbox Code Playgroud)
日志也无济于事.
由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'无法解析格式字符串"(用户名CONTAINS [cd]%1 $ @)||(userId CONTAINS [cd]%1 $ @)||(名字CONTAINS [ cd]%1 $ @)||(姓氏CONTAINS [cd]%1 $ @)"'
编辑1:
好吧,似乎predicateWithFormat不理解"%1 $ @".我切换到
[... predicateWithFormat:[NSString stringWithFormat:...]] // (same format as above)
Run Code Online (Sandbox Code Playgroud)
它通过了这条线.但是,下一个问题是:
self.filteredUserList = [self.userList filteredArrayUsingPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[valueForUndefinedKey:]:实体用户不是密钥值编码兼容的密钥"a".
"a"是我在searchTextBox中输入的关键字.WUT?
我在调试控制台中打印出谓词,看起来没有错:
username CONTAINS[cd] a OR userId CONTAINS[cd] a OR firstname CONTAINS[cd] a OR lastname CONTAINS[cd] a
Run Code Online (Sandbox Code Playgroud)
编辑2:
好的,这个超级丑陋的代码解决了问题:
[NSPredicate predicateWithFormat:@"(username CONTAINS[cd] %@) || " …Run Code Online (Sandbox Code Playgroud) 我已经看到很多人(包括我)EXC_BAD_ACCESS以未知的原因面对坠机事故。解决方案clean and build the project标记为正确的答案很多。
我很好奇为什么会发生这种情况,以及如何清洁和重新构建它,但似乎人们只是不在乎并继续使用清洁构建解决方案。
这是使用干净构建解决方案的示例EXC_BAD_ACCESS。
就我而言,我面临着这样一个荒谬的事情:
func viewDidLoad() {
super.viewDidLoad()
self.childVC.delegate = self // => Crashed EXC_BAD_ACCESS here. Fixed after clean and build
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这在Swift中比在Objective-C中发生的更多。 难道是Swift的功能吗?
这可能听起来很愚蠢,但这里是要预测的数据:
@interface Person
@property NSString *name;
@property NSString *phone;
@property NSString *address;
@end
Run Code Online (Sandbox Code Playgroud)
我有一个NSPredicate将搜索Person Array,按名称搜索.通常,我会像使用它一样
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];
Run Code Online (Sandbox Code Playgroud)
但是如何使用密钥(名称)作为参数?喜欢
NSString *key = @"name";
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"%@ contains[c] %@", key, searchText];
Run Code Online (Sandbox Code Playgroud)
谓词1工作正常,但谓词2没有.当我用lldb调试时,那两个不同:
po [predicate1 predicateFormat]
name CONTAINS[c] "Eddie"
po [predicate2 predicateFormat]
"name" CONTAINS[c] "Eddie"
Run Code Online (Sandbox Code Playgroud)
问题是:我可以使谓词2工作吗?我想将密钥传给搜索(名称)作为参数......如果可以的话,怎么样?
ios ×4
xcode ×3
nspredicate ×2
objective-c ×2
autolayout ×1
cocoa ×1
fonts ×1
swift ×1
ui-design ×1
uitableview ×1
xcode11 ×1
xcode11.3 ×1
xib ×1