小编Roh*_*nNZ的帖子

检查UITableViewCell是否完全可见的最佳方法

我有一个UITableView与不同高度的单元格,我需要知道它们何时完全可见.

目前,我循环遍历可见单元格列表中的每个单元格,以检查每次滚动视图时它是否完全可见.这是最好的方法吗?

这是我的代码:

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {

    CGPoint offset = aScrollView.contentOffset;
    CGRect bounds = aScrollView.bounds;    
    NSArray* cells = myTableView.visibleCells;

    for (MyCustomUITableViewCell* cell in cells) {

        if (cell.frame.origin.y > offset.y &&
            cell.frame.origin.y + cell.frame.size.height < offset.y + bounds.size.height) {

            [cell notifyCompletelyVisible];
        }
        else {

            [cell notifyNotCompletelyVisible];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

请注意* - (NSArray )visibleCells返回可见单元格,这些单元格完全可见且部分可见.

编辑2:

这是在结合lnafzigerVadim Yelagin的解决方案后的修订代码:

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView {
    NSArray* cells = myTableView.visibleCells;
    NSArray* indexPaths = myTableView.indexPathsForVisibleRows;

    NSUInteger cellCount = [cells count]; …
Run Code Online (Sandbox Code Playgroud)

visible uitableview ios

90
推荐指数
5
解决办法
5万
查看次数

iOS 7 BUG - NSAttributedString不会出现

上周我问了一个关于模拟器错误的问题,NSAttributedString没有显示:iOS 7模拟器错误 - NSAttributedString没有出现

不幸的是,现在看来这不是模拟器错误,而是iOS 7错误.我现在已经在iPhone 5设备上重现了这个问题.

该错误似乎是使用NSUnderlineStyleAttributeName和NSParagraphStyleAttributeName作为NSAttributedString的属性的组合.

到目前为止,我只测试了两台iOS 7设备,问题只出现在其中一台设备上.即使他们已经升级到完全相同的版本:

  • 带iOS 7.0的第一部iPhone 5(11A465):不显示文字

  • 升级到7.0.2后的第一个iPhone 5(11A501):不显示文本

  • 运行iOS 7.0的第二部iPhone 5(11A4449d):正确显示文本

  • 升级到7.0.2(11A501)后的第二部iPhone 5:不显示文字

所以看来Apple在iOS 7.0(11A4449d)之后引入了这个bug.我已经向他们提交了一个错误,并会根据我得到的任何回复更新您.

重现bug的步骤

如果您运行的是iOS 7.0.2,那么您应该可以重现此错误.

在您的设备上下载并运行该项目https://github.com/rohinnz/iOS-7-BUG---NSAttributedString-does-not-appear

要么

1)在Xcode 5中创建一个新的"单视图应用程序".什么都叫它.

2)在ViewController.m中,将viewDidLoad方法替换为:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSMutableParagraphStyle* paragraph = [[NSMutableParagraphStyle alloc] init];
    paragraph.alignment = NSTextAlignmentCenter;

    NSAttributedString* attrStr = [[NSAttributedString alloc] initWithString:@"Lorem ipsum dolor sit" attributes:
                                   @{NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle),
                                     NSParagraphStyleAttributeName:paragraph}];

    UILabel* myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 0, 0)];
    myLabel.backgroundColor = [UIColor greenColor];
    myLabel.attributedText = attrStr;
    [myLabel sizeToFit];

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

3)编译并在您的设备上运行.根据您的iOS …

nsattributedstring ios7 xcode5

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

了解iOS Cookie接受政策

有关NSHTTPCookieStorage的cookie接受政策的Apple文档令人困惑.

这就是文档所说的:

NSHTTPCookieStorage实现管理cookie存储的单例对象(共享实例).每个cookie由NSHTTPCookie类的实例表示.通常,cookie在所有应用程序之间共享,并跨进程边界保持同步.会话cookie(cookie对象的isSessionOnly方法返回YES)是单个进程的本地cookie,不共享.

iOS注意:在iOS中的应用程序之间不共享Cookie.

注意:对cookie接受策略所做的更改会影响使用cookie存储的所有当前正在运行的应用程序.

以下关于 - (void)setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)aPolicy

默认的cookie接受策略是NSHTTPCookieAcceptPolicyAlways.更改cookie策略会影响使用cookie存储的所有当前运行的应用程序.

现在我的第一个想法是,如果应用程序调用setCookieAcceptPolicy,更改将影响其他正在运行的应用程序.情况似乎并非如此.调用setCookieAcceptPolicy只会影响调用它的应用程序.

适用于所有正在运行的应用程序的唯一cookie策略是Safari.在app 7调用setCookieAcceptPolicy之前的iOS 7中,它使用了safari策略.因此,如果将safari cookie策略设置为始终阻止,则任何应用程序在设置自己的cookie策略之前将无法使用cookie.我知道自从iOS 7问世以来,这已经导致了很多应用程序的问题.

我的观察是否正确,或者我错过了什么?

编辑

我已经向Apple提出了一个错误,等待现在回复他们.

cookies ios

16
推荐指数
1
解决办法
9202
查看次数

iOS分配 - 快照中的持久计数并不总是0

在分析我的iOS应用程序时,我多次执行一个简单的任务,我从堆栈中推送和弹出视图,然后拍摄快照.每次执行相同的代码,推送的视图只包含一些图像,一旦视图弹出就会被删除.

仪器截图

现在因为几乎一半的快照的持久计数为0,假设没有废弃的内存会安全吗?

我听说持久性计数大于零的行可能是因为某些内部缓存.

我正在使用Xcode 4.2.1,该应用程序正在使用ARC.

编辑:

感谢Kendall Helmstetter Gelner,我设法进一步调试了这个问题.我可能不应该使用模拟器进行调试.我现在在设备上运行它,现在看起来有一个对象没有被释放:

应用程序在设备上运行的快照

在查看扩展的详细信息视图后,我认为我刚刚找到了问题的原因.

allocation instruments ios heapshot

6
推荐指数
1
解决办法
919
查看次数

适用于白标应用的iOS静态库代码库

我正在寻找定制我们的iOS应用程序的最佳方法,以便我们可以轻松创建它的白色标签版本并使它们保持同步.

一种方法是将整个代码库放在静态库项目中.然后为我们的主应用程序和每个白标应用程序创建一个单独的项目.这些项目每个都包含对代码库库作为子项目的引用,以及它们自己的资产,如图标,加载图像和Info.plist文件.

我的同事已成功将这种方法用于Eclipse中的Android姐妹项目.

不幸的是,这种方法在xcode中可能不起作用.xcode似乎不允许某些资源与静态库捆绑在一起,比如必须使用的Settings.bundle和Localizable.strings.

有什么方法可以在xcode中使用这种方法,或者我最好只引用每个项目的codebase文件夹?

编辑:

最初我打算只引用每个项目的codebase文件夹,但发现每次在代码库中添加/删除/重命名文件时,这种方法都需要在每个项目中重新添加codebase目录.

xcode white-labelling ios

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

iOS 7模拟器错误 - 未出现NSAttributedString

更新:我刚刚在运行iOS 7的iPhone 5上遇到过这个问题.很快就会提供更多信息.

我想我在iOS 7模拟器中发现了一个没有出现NSAttributedString的错误.如果其他人可以测试这个以确认它是一个错误,那将是很好的,然后我将向Apple提交一个错误.

问题似乎是NSAttributedString使用NSUnderlineStyleAttributeName和NSParagraphStyleAttributeName的组合.

以下是重现的步骤:

1)在Xcode 5中创建一个新的"单视图应用程序".什么都叫它.

2)在ViewController.m中,将viewDidLoad方法替换为:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSMutableParagraphStyle* paragraph = [[NSMutableParagraphStyle alloc] init];
    paragraph.alignment = NSTextAlignmentCenter;

    NSAttributedString* attrStr = [[NSAttributedString alloc] initWithString:@"Lorem ipsum dolor sit" attributes:
                                   @{NSUnderlineStyleAttributeName:@1,
                                     NSParagraphStyleAttributeName:paragraph}];

    UILabel* myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 0, 0)];
    myLabel.backgroundColor = [UIColor greenColor];
    myLabel.attributedText = attrStr;
    [myLabel sizeToFit];

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

3)在iOS 7设备上运行,然后在iOS 7模拟器中再次运行它.

4)最后,将部署目标设置为iOS 6并在iOS 6模拟器上运行它.

结果应如下

  • iOS 7设备:正确显示
  • iOS 7模拟器:仅显示标签背景
  • iOS 6模拟器:正确显示

截图:

iOS7设备

iOS 7设备
iOS7模拟器
iOS 7模拟器

ios-simulator ios7 xcode5

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

XCode 4.2 Objective-C ARC LLVM错误:当前解析器标记' - '和生成复合语句('{}')

升级到Objective-C ARC(自动引用计数)后,我的代码不再编译并给我这些奇怪的错误:

/Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m 
1. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:52:1: current parser token '-'
2. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:39:1: LLVM IR generation of declaration 'PurchaseThemeOptionVC::viewDidLoad'
3. /Users/teacher/drawingapp/Main/Source/PurchaseThemeOptionVC.m:39:21: LLVM IR generation of compound statement ('{}')
clang: error: unable to execute command: Segmentation fault
clang: error: clang frontend command failed due to signal 2 (use -v to see invocation)

我已经多次查看了源文件,但我看不出它有什么问题.

这些错误意味着什么?

  • 当前解析器标记' - '
  • 生成声明'PurchaseThemeOptionVC :: viewDidLoad'
  • 生成复合语句('{}')

objective-c llvm xcode4.2 automatic-ref-counting

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