小编Rob*_* B.的帖子

UITableView分隔符奇怪的行为

我有一个简单的样式表,有多个部分.

症状:首次加载表时,每个单元格都有正常的分隔符,除了每个部分中的最后一个单元格(即"标题之前").但是,当滚动时,在某些单元格上会出现分隔符.此外,如果选择了单元格,然后取消选择,则会出现分隔符.

打印视图层次结构显示,在干净启动时,隐藏了每个部分中最后一个单元格的分隔符视图,因此我认为这将是正常行为:

<_UITableViewCellSeparatorView: 0x145b1990; 
    frame = (0 47.5; 320 0.5); 
    hidden = YES; 
    layer = <CALayer: 0x145b2950>>
Run Code Online (Sandbox Code Playgroud)

有时滚动; 并选择细胞; 此隐藏属性将被删除,因此显示分隔符.

第一个假设是我做错了事; 但这也发生在最基本的hello world应用程序中:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView reloadData];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 4;
}

- (NSInteger)tableView:(UITableView *)tableView 
    numberOfRowsInSection:(NSInteger)section {
    return 2;
}

- (NSString *)tableView:(UITableView *)tableView 
    titleForHeaderInSection:(NSInteger)section {
    return @"test";
}

- (UITableViewCell *)tableView:(UITableView *)tableView 
    cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *reuseIdentifier = @"TestCell";
    UITableViewCell *cell = [tableView 
        dequeueReusableCellWithIdentifier:reuseIdentifier];
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

屏幕(左:开始后;右:选择单元格后):

开始 选择一个细胞后

这是Apple的一个错误,还是我错过了什么?此外,例如,在iOS Contacts应用程序中,分隔符永远不会隐藏在节标题上方...

**更新:**

能够重现这个库存音乐应用程序:例如歌曲选项卡,没有语言.选择然后取消选择任何部分的第一个单元格; …

objective-c uitableview uikit ios

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

使用Autolayout设置UIButton titleEdgeInsets和imageEdgeInsets很慢

我有几个按钮,各种尺寸的视图.所有这些都有标题和图像.我希望将图像放在顶部,标题放在底部,居中.使用以下代码可以正常工作:

- (void)centerAlignImageAndTextForButton:(UIButton*)button
{
    CGFloat spacing = 5;
    CGSize imageSize = button.imageView.frame.size;
    button.titleEdgeInsets = UIEdgeInsetsMake(0, -imageSize.width, -(imageSize.height + spacing), 0);
    CGSize titleSize = button.titleLabel.frame.size;
    button.imageEdgeInsets = UIEdgeInsetsMake(-(titleSize.height + spacing), 0, 0, -titleSize.width);
}
Run Code Online (Sandbox Code Playgroud)

但是,在进入此视图之前,我注意到了一点暂停.Instruments中的Time Profiler显示,在viewDidLoad中花费的99%的时间是通过调用我的按钮方法引起的:

283.0ms  -[XViewController viewDidLoad]
282.0ms    -[XViewController centerAlignImageAndTextForButton:]
141.0ms      -[UIButton imageView]
 98.0ms        -[UIView(Hierarchy) layoutBelowIfNeeded]
141.0ms      -[UIButton titleLabel]
103.0ms        -[UIView(Hierarchy) layoutBelowIfNeeded]
Run Code Online (Sandbox Code Playgroud)

在内部调用各种与布局相关的内容[UIView(Hierarchy) layoutBelowIfNeeded],例如[UIView(AdditionalLayoutSupport) recursiveLayoutEngineDidChange][NSLayoutConstraint addToEngine].

我知道可以在Interface Builder中设置这些插件,但这不仅是一项繁琐的工作(需要'猜测'文本的宽度); 该应用程序也将被本地化,因此对于一种语言有用的插图不适用于文本大小不同的另一种语言(我使用故事板的基本本地化和.strings文件而不是为每种语言复制整个故事板).所以对我而言,似乎以编程方式设置insets是要走的路,但它导致的延迟并不是真的可以接受.

有什么想法可以解决这个问题?

objective-c uibutton uikit ios autolayout

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

邀请停止广告的同伴时,Multipeer Connectivity崩溃

我有以下场景:

  • 对等方A正在等待自定义UI中的邀请(让我们称之为WaitingVC).该MCNearbyServiceAdvertiser对象在应用程序启动初始化,以及广告开始(startAdvertisingPeer的时候)WaitingVC提出.
  • 对等B具有MCNearbyServiceBrowser启动和运行,也具有自定义UI(即,不使用Apple提供的MCBrowserViewController).
  • 对等B找到对等A(browser:foundPeer:withDiscoveryInfo:被称为).
  • 同时Peer A选择关闭WaitingVC.广告已停止(stopAdvertisingPeer).
  • 在Peer B发现之前有几秒滞后,Peer A丢失(browser:lostPeer:即被称为).
  • 如果在这几秒钟内,同伴B选择邀请同伴A(似乎仍然可用于同伴B),同伴A崩溃(是的,被邀请的人,通常停止广告).
  • 同伴B的邀请通常会超时,并且不会出现任何问题.

崩溃发生在队列中com.apple.NSNetServices.tcplistener-queue.一个dispatch_call_block_and_release呼叫在释放失败(EXC_BREAKPOINT).

我真的很想知道,如果这是MC框架中的一个错误; 还是我错过了一些清理程序?同行A仅执行以下操作:

  • App delegate:创建一个MCPeerID存储在一个强大的属性中,
  • App delegate:创建一个MCNearbyServiceAdvertiser,存储在一个强大的属性中,设置委托,
  • WaitingVC:呼叫startAdvertisingPeer,然后stopAdvertisingPeer完成后调用.

无论我做什么,崩溃似乎都会发生.如果MCNearbyServiceAdvertiser …

objective-c ios7 multipeer-connectivity

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