如果可以避免,我不想使用子视图.我想要一个UIButton背景图片,文字和图像.现在,当我这样做时,图像位于文本的左侧.背景图像,文本和图像都具有不同的突出显示状态.
我正在使用TTTAttributedLabel(使用CoreText)而不是UILabel来加粗某些部分.它工作得很好,但文字看起来不一样.它看起来像是使用不同的字体.我把它设置为相同的字体(Helvetica),但一个是CTFont,一个是UIFont.为什么他们看起来不一样?
UIFontUILabel的:[UIFont systemFontOfSize:15]CTFont针对CoreText的:CTFontCreateWithName((__bridge CFStringRef)[UIFont systemFontOfSize:15].fontName, 15, NULL)UILabel截图:

CoreText屏幕截图:

"散步"中的"p"和"o"是最容易看到字体看起来不一样的部分.CoreText版本中的字母更圆.
我使用了大量的可可演示应用程序,在3天或一个月左右后停止工作.他们是怎么做到的?什么是最好的方式?另外,有什么限制?
为什么[NSFetchedResultsController performFetch:]在重新创建NSFetchedResultsController具有等效项时会崩溃NSFetchRequest?
我有一个应用程序,它有一个线程(消息线程)的表视图控制器。当您点击一个线程时,它会加载另一个表视图控制器,该控制器使用 NSFetchedResultsController 来获取该线程的所有消息并显示它们。我使用 NSFetchedResultsController 因为我可以在后台加载消息/删除/添加新消息,而根本不用担心显示它们。
第二个表视图控制器用于所有线程,所以当我点击返回然后点击另一个线程时,我只是删除当前的 NSFetchedResultsController 并为新线程设置一个新的。
以下是重现 CRASH 的步骤:
在点击 NSFetchedResultsController 时,会创建与第一个相同的 NSFetchedResultsController。(相同的缓存和一切)。而不是像它应该给出这个错误和崩溃那样工作:
Program received signal: “EXC_BAD_ACCESS”.
NSFetchedResultsController 正在向释放的对象发送消息。
这是堆栈跟踪:
#0 0x95ffd688 in objc_msgSend
#1 0x0060699b in -[NSFetchedResultsController(PrivateMethods) _computeSectionInfo:error:]
#2 0x00601bf0 in -[NSFetchedResultsController performFetch:]
#3 0x0001c170 in -[CMNewMessagesViewController loadMessagesViewControllerForThread:showProfile:] at CMNewMessagesViewController.m:331
Run Code Online (Sandbox Code Playgroud)
3是我的方法
有什么想法吗?任何帮助将非常感激。
解决了!
这是我的错。我使用的是从另一个键值派生的 sectionNameKeyPath。只要 NSFetchRequest 按该键值排序就可以了。问题是它是动态生成的,因为我不想浪费数据库中的空间。我在 NSManagedObject 类中使用了一个由 didTurnIntoFault 清理的实例变量。
现在,我认为实例变量必须已创建然后丢弃,然后在某个时候重新创建,从而使 NSFetchedResultsController 的排序陷入停顿。
这解释了为什么没有 sectionNameKeyPath 或委托解决了这个问题。
现在,我已经切换到 CoreData 对象中保存的键值,它似乎工作得很好。
我有一个按钮,我正在添加一个阴影,如下所示:
b.backgroundColor = [UIColor colorWithRed:0.820 green:0.878 blue:0.941 alpha:1.000];
b.layer.cornerRadius = 3;
b.layer.shadowOffset = CGSizeMake(2, 2);
b.layer.shadowOpacity = 0.2;
b.layer.shadowRadius = 0;
Run Code Online (Sandbox Code Playgroud)
这很好用:

如果我像这样使用阴影路径:
b.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:b.bounds cornerRadius:b.layer.cornerRadius].CGPath;
Run Code Online (Sandbox Code Playgroud)
视网膜设备上的阴影模糊:

它在非视网膜设备上很好,如果shadowRadius不为零似乎可以正常工作。我试过将contentsScale和设置rasterizationScale为 2 但它不影响阴影。
还有其他想法吗?
在ARC下,我知道"堆栈变量是用nil初始化的"(docs).静态const数组的值怎么样?这是有道理的,但我找不到官方陈述的东西.例如:
static NSString * const strings[5] = {
[2] = @"value2",
[4] = @"value3",
};
Run Code Online (Sandbox Code Playgroud)
会strings[3]== nil?