小编Edd*_*die的帖子

Xcode 11 添加新的约束设置为零:使用设置值而不是默认/标准

我曾经使用自动布局添加新约束来对超级视图/相对视图进行简单约束,如下所示(对于 loooong 时间):

在此处输入图片说明

但是,最近更新到最新的 xcode(11.3.3 或 11.3/11C29)后,我遇到了这个奇怪的问题:当我设置常量 = 0 时,它们总是以不需要的方式生成约束,如下所示:

在此处输入图片说明

似乎默认值在某种程度上是 20 并且让我的观点看起来如此错误(0 与 20 相比?)

如果我通过像这样编辑约束来解决这个问题:

在此处输入图片说明

然后它会再次更正(图像是在编辑约束之后,在编辑之前显示常量 = Standard

我什至不知道如何描述这个问题,但是我如何解决这个新问题add new constraint以使用我的愿望点而不是标准/默认值?

更新:

它似乎只发生在约束超级视图时。不知道如何修复tho。

2020 年 4 月 1 日更新:

Xcode11.4 修复了这个问题。

xcode interface-builder autolayout xcode11 xcode11.3

77
推荐指数
5
解决办法
8681
查看次数

什么是iOS 9.3系统字体名称?

我想知道iPhone上默认系统字体的名称.它曾经是"HelveticaNeue"我猜,但现在呢?

user-interface xcode fonts ui-design ios

13
推荐指数
1
解决办法
2万
查看次数

UITableView及其在xib文件中的单元格

长话短说,我想创建一个XIB文件,其中包含:

  1. 一个看法.在该视图中,它有很多东西和tableView.(连接数据源,委托给文件所有者).该视图是XIB文件的主视图.

  2. 自定义单元格,(用作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)

objective-c uitableview xib ios uicollectionview

7
推荐指数
1
解决办法
1万
查看次数

NSPredicate无法解析格式字符串

我看不出这些代码行有什么问题.为什么不能解析?

[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)

objective-c nspredicate ios

5
推荐指数
1
解决办法
4633
查看次数

为什么使用XCode Clean and Build修复EXC_BAD_ACCESS?

我已经看到很多人(包括我)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的功能吗?

compiler-construction xcode exc-bad-access swift

5
推荐指数
1
解决办法
408
查看次数

将键作为参数传递给predicateWithFormat中的参数

这可能听起来很愚蠢,但这里是要预测的数据:

@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工作吗?我想将密钥传给搜索(名称)作为参数......如果可以的话,怎么样?

cocoa nspredicate ios

4
推荐指数
1
解决办法
1158
查看次数