小编dji*_*i33的帖子

每次Xcode重新启动时错误放置视图

我在我的应用程序中第一次使用故事板

当我关闭Xcode时,我有关于错误放置的视图或与我的故事板有关的任何内容的0警告.当我重新启动Xcode并打开故事板时,我的15个场景中有3个放错了视图警告.

没有触及任何东西(除了选择文件),我可以发出一个git status并看到.storyboard文件有变化.如果我git diff,我看到这包含在文件的多个区域:

<variation key="widthClass=compact" misplaced="YES">
    <rect key="frame" x="8" y="56" width="130" height="34"/>
</variation>
Run Code Online (Sandbox Code Playgroud)

如果元素已经有<variation key="widthClass=Compact"节点,则添加misplaced属性和rect节点.

要使警告消失,我唯一需要做的就是点击每个警告,确保选中"更新框架",然后单击"修复错位".这修复了一切,直到我重新启动Xcode.

我场景的基本结构是:

UIView
    UICollectionView
        UICollectionReusableView
        UICollectionViewCell
        UICollectionViewCell
    UISegmentedControl
Run Code Online (Sandbox Code Playgroud)

每次重新启动时如何防止这种情况发生?

xcode objective-c interface-builder ios autolayout

62
推荐指数
1
解决办法
6441
查看次数

使用UINavigationController在UIPageViewController中下载内容

更新2

我一直在使用4英寸设备在iOS模拟器中运行和测试我的应用程序.如果我使用3.5英寸设备运行,标签不会跳转.在我的.xib中,在Simulated Metrics下,我将它设置为Retina 4英寸全屏.知道为什么我只在4英寸设备上看到这个问题吗?

更新1

在IB中,如果我在模拟指标中选择"导航栏",我的标签仍然会跳转.我可以在第一个屏幕上正确呈现标签的唯一方法是不将导航控制器设置为我的窗口的根视图控制器.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我的窗口的rootViewController被设置为一个UINavigationController,其rootViewController嵌入了一个UIPageViewController.

当我的应用加载时,会显示初始视图,其内容会向下推一点,大小与导航栏大致相同.当我滚动pageViewController时,内容会跳转到它在nib中的位置,而pageViewController加载的所有其他viewControllers都可以.

带导航控制器的uipageviewcontroller

在我的appDelegate中:

self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[ContainerViewController new]];
Run Code Online (Sandbox Code Playgroud)

在ContainerViewController中:

- (void)viewDidLoad {

    [super viewDidLoad];

    self.pvc = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll
                                               navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                             options:nil];
    self.pvc.dataSource = self;
    self.pvc.delegate = self;
    DetailViewController *detail = [DetailViewController new];
    [self.pvc setViewControllers:@[detail]
                       direction:UIPageViewControllerNavigationDirectionForward
                        animated:false
                      completion:nil];

    [self addChildViewController:self.pvc];
    [self.view addSubview:self.pvc.view];
    [self.pvc didMoveToParentViewController:self];
}
Run Code Online (Sandbox Code Playgroud)

xcode objective-c uinavigationcontroller ios uipageviewcontroller

60
推荐指数
3
解决办法
2万
查看次数

嵌入自定义容器视图控制器时,内容位于导航栏下方.

UPDATE

根据Tim的回答,我在每个视图控制器中实现了以下内容,该控制器具有作为自定义容器一部分的scrollview(或子类):

- (void)didMoveToParentViewController:(UIViewController *)parent
{
    if (parent) {
        CGFloat top = parent.topLayoutGuide.length;
        CGFloat bottom = parent.bottomLayoutGuide.length;

        // this is the most important part here, because the first view controller added 
        // never had the layout issue, it was always the second. if we applied these
        // edge insets to the first view controller, then it would lay out incorrectly.
        // first detect if it's laid out correctly with the following condition, and if
        // not, manually make the adjustments …
Run Code Online (Sandbox Code Playgroud)

objective-c uinavigationbar ios ios7

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

MKAnnotationView - 锁定自定义注释视图以固定位置更新

更新#5我想这是赏金时间.即使使用我发布的代码示例,也有100多个视图并且没有人被刺穿.一些声望点怎么样!

更新#4这是一个非常复杂的问题,所以我创建了一个新的基于选项卡的项目,其中包含我的应用程序的部分,我在这里遇到了麻烦.您可以从以下网址下载:http://www.servinitup.net/CustomCalloutAnnotation.zip 随意打开它(需要添加自己的包标识符才能在手机上运行)并玩它,看看你是否可以得到那个darned标注注释随着针移动!

更新#3尝试使setAnnotation成为教程的CalloutMapAnnotationView的公共方法并直接调用它.没有运气.尽管发生了一些奇怪的事情,唯一感动的是标注的小三角形部分.我无法让整个标注移动.

更新#2仍然没有多少运气,但现在一直在寻找以编程方式创建"缩放到缩放"然后立即撤消它的方法,因此用户永远不会看到更改.希望以编程方式执行此操作与手动执行此操作具有相同的效果,并且callout注释将弹回到它的父级.有任何想法吗?

更新#1在这里玩了之后我已经得到了: - 替换self.calloutAnnotation.coordinate = coords;self.calloutAnnotation.latitude = coords.latitude;self.calloutAnnotation.longitude = coords.longitude; - 随着更改,如果我稍微捏住地图以在引脚更新后放大或缩小,则标注注释会动画到正确的位置,正好在针.

所以现在我需要弄清楚如何在没有用户实际捏缩放的情况下实现这一点.


原帖

我和其他SO用户一起使用这个非常棒的解决方案来创建自定义标注注释:http: //blog.asolutions.com/2010/09/building-custom-map-annotation-callouts-part-1/

当您使用标准标注(annotationview.canShowCallout = true)并且当位置更新时,引脚在屏幕上移动,标准标注随着引脚一起跟踪,就像它们被锁定在一起一样.

使用上面的自定义标注解决方案时,当我的图钉在位置更新后移动时,标注注释将保留在其原始位置.当然,我想模仿iOS标准,并有自定义标注注释轨道和引脚.

这是我到目前为止的代码,它成功地移动了注释视图,但不是自定义的callout注释视图:

/* core location broadcasts a notification, and my view controller listens to that notification and calls locationManagerDidFindLocation */
- (void)locationManagerDidFindLocation:(NSNotification *)notif {
    CLLocation *location = [notif.userInfo objectForKey:@"location"];
    CLLocationCoordinate2D coords = [location coordinate];
    MKCoordinateSpan span = MKCoordinateSpanMake((5/69), (5/69));
    MKCoordinateRegion region = …

iphone objective-c mapkit mkmapview mkannotationview

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

canOpenURL无法实现系统范围的URL方案

我正在运行iOS 9b5.

在我的应用程序中,如果设备可以拨打电话,我想将文本颜色设置为蓝色,以便它看起来可以点亮.如果没有,我把它留黑.

为了确定设备功能,我使用:

[[UIApplcation sharedApplication] canOpenURL:@"telprompt://5555555555"]  
Run Code Online (Sandbox Code Playgroud)

众所周知,iOS 9要求我们将我们将在我们的应用中使用的任何URL方案列入白名单作为隐私措施.

我在Info.plist中有这个:

<key>LSApplicationQueriesSchemes</key>  
<array>  
  <string>telprompt</string>  
</array>  
Run Code Online (Sandbox Code Playgroud)

无论我做什么,我仍然得到canOpenURL:URL失败:"telprompt://" - 错误:"(null)".我试过tel://和sms://我似乎无法避免syslog警告.

有没有人知道如何检测设备是否可以在不触发这些警告的情况下拨打电话?

objective-c uiapplication ios ios9

25
推荐指数
3
解决办法
3万
查看次数

无法让scrolllsToTop在iOS7上运行

我在我的最新应用程序中瞄准iOS7,并且点击状态栏似乎不会将tableView或collectionView滚动到顶部.

我已经设定self.tableView.scrollsToTop = true,但仍然没有任何反应.

我知道Apple显着改变了iOS7中的状态栏,但这些更改是否会破坏scrollsToTop功能?

更新

为了回应其中一个答案中的评论,我测试了以确保我的集合视图确实是屏幕上唯一的scrollView,它是:

(lldb) po [self.view recursiveDescription]
<UIView: 0x1092ddf0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x109357e0>>
   | <UICollectionView: 0x11351800; frame = (0 0; 320 568); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x10966080>; layer = <CALayer: 0x109623a0>; contentOffset: {0, -64}> collection view layout: <UICollectionViewFlowLayout: 0x10940a70>
   |    | <UIImageView: 0x10965fa0; frame = (0 564.5; 320 3.5); alpha = 0; opaque = NO; …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c uitableview uistatusbar ios7

24
推荐指数
3
解决办法
8974
查看次数

从其他目标获取Bundle ID

在我的Xcode项目中,我有4种不同的方案(prod,dev,staging,staging2),它们会更改安装到手机的应用程序的软件包标识符.这样我可以并排安装所有4个版本,类似于这种技术.

现在我正在为iOS 8构建Today Extension.这是一个需要自己的bundle标识符的新Target.

Extension的Bundle Identifier必须以Parent App的Bundle Identifier为前缀,否则会抛出警告:

error: Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier.

    Embedded Binary Bundle Identifier:  com.company.app.TodayExtension
    Parent App Bundle Identifier:       com.company.app.staging
Run Code Online (Sandbox Code Playgroud)

在这种情况下,嵌入式二进制包标识符必须是com.company.app.staging.TodayExtension.

有没有办法我可以通过首先查看父目标的包标识符来配置我的今日扩展目标来设置其包标识符?也许通过自定义的运行脚本构建阶段?

xcode objective-c target ios ios8

19
推荐指数
2
解决办法
8232
查看次数

何时使用带@selector的冒号

刚开始使用iPhone开发和Objective-C.

昨天我试图在我的视图中添加Observer以获取通知,并且我一直收到此错误:

unrecognized selector sent to instance

我追踪到这个事实,我需要将尾随冒号包含在我的selector参数中:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(nameOfMySelector:) name:@"BBLocationServicesAreDisabled" object:nil];

今天,我觉得我很聪明,因为在设置按钮的动作参数时,我记得我昨天的错误,并将冒号添加到动作参数中.action参数采用a @selector,就像设置一个观察者的选择器参数一样NSNotification,所以我认为我做的是正确的.

但是,使用以下代码:

[self.callToActionButton addTarget:self action:@selector(nameOfMySelector:) forControlEvents:UIControlEventTouchUpInside];

我得到完全相同的错误:

unrecognized selector sent to instance

是什么赋予了?为什么@selector需要一个尾随冒号,另一个不需要?我应该遵循哪些规则应该包含哪些内容以及什么时候应该保留,以及为什么我不能总是只做一个或另一个?

谢谢!

iphone objective-c selector nsnotifications ios

12
推荐指数
3
解决办法
5562
查看次数

在ABPeoplePickerNavigationController中自定义表格单元格

我花了一些时间在SO上搜索这个答案,但找不到它,所以这里有:

我开始使用ABPeoplePickerNavigationController,当用户点击一个人时,他们将被带到ABPersonViewController,在那里他们将能够选择电话号码和电子邮件地址.完成ABPersonViewController后,它们将被带回ABPeoplePickerNavigationController.非常简单的东西.

我想要的是在他们选择电话号码或电子邮件地址后,在他们在ABPeoplePickerNavigationController中选择的表格单元格中添加detailLabel.类似"选择的电子邮件和电话号码"或"选择的电话号码".

Apple的文档说:

 You should not need to subclass these controllers; the expected way to modify their behavior is by your implementation of their delegate.

提供的委托方法不会处理此问题.有没有办法在没有继承自己的情况下实现这一目标?并且,如果我必须继承ABPeoplePickerNavigationController的子类,我将覆盖哪个方法来更新detailLabel?

谢谢!

iphone objective-c uitableview abaddressbook ios

12
推荐指数
1
解决办法
3793
查看次数

在iOS7中处理一个视图控制器的自动旋转

我已经阅读了很多关于SO的答案,但我似乎无法在iOS7上进行自动旋转.

我只需要一个视图控制器来旋转,所以我不想在我的Info.plist中设置旋转设置.

据我了解Apple的文档,单个视图控制器可以通过简单地覆盖两个方法来覆盖全局旋转设置(来自Info.plist).Info.plist设置为仅允许Portrait,我的视图控制器实现以下方法:

- (NSUInteger)supportedInterfaceOrientations
{
    NSLog(@"%s", __PRETTY_FUNCTION__);
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

- (BOOL)shouldAutorotate
{
    NSLog(@"%s", __PRETTY_FUNCTION__);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我在旋转时看到那些NSLog语句但没有旋转.

如果我使用正确的旋转设置配置Info.plist,我的视图将旋转,但如果我尝试依赖我的视图控制器则不会.

不确定它是否重要,但我试图旋转的视图来自使用自动布局的.xib.

此外,我的ViewController以模态方式呈现,并包含在导航控制器中.我试过单独呈现视图控制器,但这不起作用.我也尝试在UINavigationController中添加一个类别,以便从它的topViewController获取它的自动旋转方向.

iphone objective-c rotation ios ios7

9
推荐指数
3
解决办法
2万
查看次数