我有一个简单的样式表,有多个部分.
症状:首次加载表时,每个单元格都有正常的分隔符,除了每个部分中的最后一个单元格(即"标题之前").但是,当滚动时,在某些单元格上会出现分隔符.此外,如果选择了单元格,然后取消选择,则会出现分隔符.
打印视图层次结构显示,在干净启动时,隐藏了每个部分中最后一个单元格的分隔符视图,因此我认为这将是正常行为:
<_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应用程序中,分隔符永远不会隐藏在节标题上方...
**更新:**
能够重现这个库存音乐应用程序:例如歌曲选项卡,没有语言.选择然后取消选择任何部分的第一个单元格; …
我有几个按钮,各种尺寸的视图.所有这些都有标题和图像.我希望将图像放在顶部,标题放在底部,居中.使用以下代码可以正常工作:
- (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是要走的路,但它导致的延迟并不是真的可以接受.
有什么想法可以解决这个问题?
我有以下场景:
WaitingVC).该MCNearbyServiceAdvertiser对象在应用程序启动初始化,以及广告开始(startAdvertisingPeer的时候)WaitingVC提出.MCNearbyServiceBrowser启动和运行,也具有自定义UI(即,不使用Apple提供的MCBrowserViewController).browser:foundPeer:withDiscoveryInfo:被称为).WaitingVC.广告已停止(stopAdvertisingPeer).browser:lostPeer:即被称为).崩溃发生在队列中com.apple.NSNetServices.tcplistener-queue.一个dispatch_call_block_and_release呼叫在释放失败(EXC_BREAKPOINT).
我真的很想知道,如果这是MC框架中的一个错误; 还是我错过了一些清理程序?同行A仅执行以下操作:
MCPeerID存储在一个强大的属性中,MCNearbyServiceAdvertiser,存储在一个强大的属性中,设置委托,WaitingVC:呼叫startAdvertisingPeer,然后stopAdvertisingPeer完成后调用.无论我做什么,崩溃似乎都会发生.如果MCNearbyServiceAdvertiser …