以下代码通过iOS 6运行:
UIButton *myButton = nil;
myButton = [UIButton buttonWithType:UIButtonTypeCustom];
myButton.bounds = CGRectMake(0,0,44,30);
// setup myButton's images, etc.
UIBarButtonItem *item = nil;
item = [[UIBarButtonItem alloc] initWithCustomView:customButton];
Run Code Online (Sandbox Code Playgroud)
这是按钮应该如何对齐:
但是,在iOS 7上,按钮似乎从右侧或左侧偏移了太多像素:
如何才能使我的自定义条形按钮项目正确对齐?
uinavigationbar uibutton uibarbuttonitem uinavigationitem ios7
这个问题的实际标题比我可能适合的长:
启动一个应用程序,其根视图控制器仅支持纵向,但在主屏幕处于横向方向时支持iPhone 6 Plus上的横向方向会导致应用程序窗口处于横向方向但设备为在纵向方向.
简而言之,它看起来像这样:
当它应该看起来像这样:
重现步骤:
iPhone 6 Plus运行iOS 8.0.
一个应用程序,其plist支持所有但纵向倒置的方向.
应用程序的根视图控制器是UITabBarController.
一切,标签栏控制器及其所有后代子视图控制器都UIInterfaceOrientationMaskPortrait
从中返回supportedInterfaceOrientations
.
从iOS主屏幕开始.
旋转至横向(需要iPhone 6 Plus).
冷启动应用程序.
结果:界面方向损坏.
除了完全禁用横向之外,我无法想到强制执行纵向定位的任何其他方式,这是我无法做到的:我们的网络浏览器模态视图控制器需要横向.
我甚至尝试了子类化UITabBarController并重写supportedInterfaceOrientations以返回仅限纵向的掩码,但是这(即使使用上述所有其他步骤)也没有解决问题.
鉴于以下代码和运行iOS 7.1或更高版本的设备:
NSDictionary *fontTraitsDictionary = @{UIFontWeightTrait : @(-1.0)};
NSDictionary *attributesDictionary = @{
UIFontDescriptorFamilyAttribute : @"Helvetica Neue",
UIFontDescriptorTraitsAttribute : fontTraitsDictionary
};
UIFontDescriptor *ultraLightDescriptor = [UIFontDescriptor fontDescriptorWithFontAttributes:attributesDictionary];
UIFont *shouldBeAnUltraLightFont = [UIFont fontWithDescriptor:ultraLightDescriptor size:24];
NSLog(@"%@", shouldBeAnUltraLightFont);
Run Code Online (Sandbox Code Playgroud)
我希望它的值是shouldBeAnUltraLightFont
HelveticaNeue-UltraLight的一个实例,但它是:
<UICTFont: 0x908d160> font-family: "Helvetica"; font-weight: normal; font-style: normal; font-size: 24.00pt
Run Code Online (Sandbox Code Playgroud)
据我所知,我正在关注Apple文档.为什么完全忽略字体系列和字体粗细信息?
我试过的事情
无论这些更改如何,返回的字体始终是正常重量的Helvetica的香草实例.
为了有效地提出我的问题,我们首先考虑一下我面临的确切情况:
常规设置
导致问题的事件顺序
用户启动主机应用程序.它开始从远程API资源获取数据.核心数据模型对象基于API响应创建,并"upserted"到主机应用程序的托管对象上下文中.每个API实体都有一个uniqueID,用于在远程API后端中标识它.通过"upsert",我的意思是,对于每个API实体,主机应用程序仅在无法找到给定唯一ID的现有条目时在Core Data中创建新条目.
同时,用户还启动了一个主机应用程序的扩展.它也可以从同一个远程API执行某种提取.它还尝试在解析API响应时执行"upsert".
问题:如果主机应用程序和扩展程序同时尝试为同一API实体插入Core Data条目,会发生什么?要了解这是如何产生的,让我们看看upsert的事件序列:
核心数据Upsert序列:
uniqueID
等于已解析的唯一ID.uniqueID
属性设置为已解析的uniqueID.问题详情
假设主机应用程序和扩展程序同时独立地解析同一API实体的API响应.如果主机应用程序和扩展程序在它们中的任何一个完成步骤4之前到达步骤3,则它们都将尝试为相同的唯一ID插入新的核心数据条目.当他们到达步骤4并调用save:
他们各自的托管对象上下文时,Core Data将很乐意创建重复的条目.
据我所知,Core Data没有任何方法可以将属性标记为唯一.我需要一个等同于SQLite INSERT OR IGNORE
+ UPDATE
组合的核心数据..或者我需要一种方法来"锁定"持久存储的SQLite后备存储,这听起来像是一个麻烦的方法.
对iOS 8扩展引入的这个相当新颖的问题有一个已知的方法吗?
问题
仪器的Time Profiler正在从我的应用程序中剥离除系统库之外的所有符号,尽管事实上我已经在Xcode的所有相关构建设置中禁用了这种行为 - 但仅在一台开发机器上.另一台开发机器正常运行.
描述
仪器的Time Profiler正在剥离除系统库之外的所有符号,尽管事实上我已经在Xcode的所有相关构建设置中禁用了这种行为 - 但这只发生在我的一台开发机器上.我已经运行OS X时,Xcode和仪器的同一版本二次开发的机器,每台机器使用具有相同构建设置,方案和其他配置相同的Xcode项目的相同副本,并且应用程序正在使用相同的异形测试设备(iPhone 4S与iOS 5的最新公开版本).
机器1
- Mac OS X
10.7.4 - Xcode 4.3.2(4E2002)
- 仪器4.3(4321)
机器2
- Mac OS X
10.7.4 - Xcode 4.3.2(4E2002)
- 仪器4.3(4321)
重现步骤
预期的行为
我自己的代码中的符号应该出现在两台机器上的Time Profiler中.
回归
我尝试了以下所有方法,但实际结果没有变化:
重新启动机器.
尝试其他Xcode项目
删除Xcode Organizer中所有项目的"派生数据".
重新标记仪器中的文档(在〜/ Library/blahBlahBlah中仔细选择正确的DSYM文件......)
最后的笔记
以下是示例项目的.zip文件的链接:Sample Project .zip
我正在构建使用UILocalNotifications进行警报的应用程序.为了测试调度逻辑,我经常需要按分钟或小时的增量更改系统时间,或者更改时区等.
问题是,在几次会话之后,管理器设备选项卡会显示一个名为"TakingInstallLock"的状态,并在进度指示器中无限期挂起.
1)这是由更改系统时间引起的吗?2)如果没有,那又怎样?3)或者如果是,我怎样才能测试间隔几分钟到几周间隔的UILocalNotifications?
错误:
我一直收到错误代码-1009"Internet连接似乎处于脱机状态." 在通过LTE连接到Internet时,在Apple Watch Series 3上的Apple Watch扩展中发出URLSession请求时出错.
重现步骤:
预期行为:
请求设法到达目的地.
观察到的行为:
请求立即失败,错误代码为-1009"Internet连接似乎处于脱机状态".
代码示例:
let config = URLSessionConfiguration.ephemeral
let sesh = URLSession(configuration: config)
let url = URL(string: "https://google.com")!
sesh.dataTask(with: request) { (_, _, error) in
print(error)
}.resume()
Run Code Online (Sandbox Code Playgroud) 我正在使用NSAttributedString UIKit Additions在UIView中绘制属性字符串.我的问题是,尽管使用的价值NSWritingDirectionNatural
为baseWritingDirection
我的段落样式属性,文本始终默认为左到右.
这是我如何形成属性字符串(简化):
NSString *arabic = @"??????? ??????? ???????? ?????? ????? ??????? ?????? ?????. ???? ??? ????? ???? ?????? ?????? ???????? ????? ???? ??? ??? ?? ?????? ?????? ???? ?????? ??? ?????????? ???????? ???????";
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.baseWritingDirection = NSWritingDirectionNatural;
paragraph.lineBreakMode = NSLineBreakByWordWrapping;
NSMutableDictionary *attributes = [[NSMutableDictionary alloc] init];
attributes[NSParagraphStyleAttributeName] = paragraph;
NSAttributedString *string = [[NSAttributedString alloc]
initWithString:arabic
attributes:attributes];
Run Code Online (Sandbox Code Playgroud)
以下是我绘制文字的方式:
- (void)drawRect:(CGRect)rect {
[self.attributedText drawWithRect:rect
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];
}
Run Code Online (Sandbox Code Playgroud)
但它仍然从左向右流动:
我错过了什么?
我的应用程序有很多常量(kvo键,枚举等),几乎每个类都使用它们.我有一个constants.h文件,包含所有这些文件.我想在Prefix.pch文件中包含此文件,如下所示:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "AppConstants.h"
#endif
Run Code Online (Sandbox Code Playgroud)
但是,当我以这种方式包含文件时,Xcode 4的语法突出显示和代码完成停止工作.如果我在每个使用它们的类的头文件中手动包含constants文件,并从pch文件中删除include,则会返回语法突出显示和代码完成.
这是预期的行为吗?如何在不使用pch文件的情况下在每个文件中包含常量文件?由于pch文件,"AppConstants.h"文件本身是否包含在内的问题是什么?
UNUserNotificationCenter.current().requestAuthorization() 可以多次调用吗?
apple-push-notifications ios unusernotificationcenter unusernotification