セクション全体を削除するためのコントロールを実装しようとしていますが、UIPopoverView のようなオーバーレイとは対照的に、削除ボタンがヘッダーにある場合、アプリで最もよく見えます。
この質問を書いている過程で、私は答えを見つけました。出発点があれば、十分に簡単です。
セクション全体を削除するためのコントロールを実装しようとしていますが、UIPopoverView のようなオーバーレイとは対照的に、削除ボタンがヘッダーにある場合、アプリで最もよく見えます。
この質問を書いている過程で、私は答えを見つけました。出発点があれば、十分に簡単です。
コードの大部分は、2010 年からの投稿が 2 つしかないこのブログから入手しました。それから、分解するのが面倒なので、フォントの色のためだけにこのサイト
に戻ってきました。
3 つの小さな問題があり、すべてラベルに問題があります。
- Font is too narrow
- Text color is too dark
- Label origin is wrong
デフォルトのフォントはわかっているので、それが最初に来ます。
label.font = [UIFont boldSystemFontOfSize:17.0];
簡単なので次はカラーです。これには、画像エディタのスポイト ツールを使用しました。
label.textColor = [UIColor colorWithRed:0.298 green:0.337 blue:0.423 alpha:1];
// Is there a difference between alpha:1 and alpha:1.000?
それから難しい部分。大まかな推測と、完全に一致させるための微調整。
label.frame = CGRectMake(54, 4, headerView.frame.size.width-20, 22);
これで、現在の Grouped ヘッダーに完全に一致するカスタム実装ができました。
完成したコード:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 40)];
tableView.sectionHeaderHeight = headerView.frame.size.height;
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(54, 4, labelSize.width, labelSize.height)];
[label setBackgroundColor:[UIColor clearColor]];
[label setFont:[UIFont boldSystemFontOfSize:17.0]];
[label setShadowColor:[UIColor whiteColor]];
[label setShadowOffset:CGSizeMake(0, 1)];
[label setText:[self tableView:tableView titleForHeaderInSection:section]];
[label setTextColor:[UIColor colorWithRed:0.298 green:0.337 blue:0.423 alpha:1.000]];
[headerView addSubview:label];
return headerView;
}
自分で正しいフォント/色を見つけた後、このSOの答えを見つけました。しかたがない。
編集:
事実上無制限の量のテキストを許可するタイトル ラベルの場合:
// before label init
NSString *title = [self tableView:tableView titleForHeaderInSection:section];
NSUInteger maxWidth = headerView.frame.size.width-108;
CGSize labelSize = [title sizeWithFont:[UIFont systemFontOfSize:17.0]
constrainedToSize:CGSizeMake(maxWidth, CGFLOAT_MAX)];
if (labelSize.width < maxWidth) labelSize.width = maxWidth;
// after setFont:
[label setNumberOfLines:0];