如何旋转 viewForHeaderInSection
Posted
技术标签:
【中文标题】如何旋转 viewForHeaderInSection【英文标题】:How to rotate viewForHeaderInSection 【发布时间】:2011-03-30 13:23:51 【问题描述】:UITableView 有自定义标题 UIView,其中包含 UILabel。由于表格在右侧也有部分索引,我想将标签放在剩余空间的中心。
问题是当设备旋转为横向时,如何以同样的方式将标签“居中”!我已经尝试过 Interface Builder 和纯代码,但总是有问题。
限制:
-
标签尽可能窄
不得调整标签大小
标签必须始终在表格宽度减去部分索引的范围内居中
解决此问题的一种简单方法是将部分标题视图与 tableView 右侧分离。尝试过,失败了。以下是 viewForHeaderInSection 中的一些代码:
CGRect frame = CGRectMake(0, 0, tableView.bounds.size.width - 32, 50.0f);
// MAGIC 32 for SectionIndexTitles
UIView *view = [[[UIView alloc] initWithFrame:frame] autorelease];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
label.font = [UIFont fontWithName:@"Courier" size:20];
label.text = @"Section title long";
label.textAlignment = UITextAlignmentCenter;
label.backgroundColor = [UIColor redColor];
CGSize labelSize = [label.text sizeWithFont:label.font
constrainedToSize:frame.size
lineBreakMode:UILineBreakModeClip];
label.frame = CGRectMake(0, 0, labelSize.width, labelSize.height);
label.center = CGPointMake(frame.size.width/2.0f, kHeaderHeight/2.0f);
label.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
欢迎任何想法!甚至不记得我失败了多少种不同的方式:)
【问题讨论】:
【参考方案1】:嘿,在 IB 中设置如下: 禁用所有自动调整大小的功能(没有灵活的宽度、高度,也没有任何左、下、上、右)。
应该做的工作:)
要支持神奇的 32 像素,请尝试根据需要放置标签。 这意味着: 将其放置在 UIView 的中心并将其向左移动 16 个像素,现在不要以编程方式更改框架,否则“精彩”的自动定位将被操纵我们并不真正想要的 :)
【讨论】:
不,相对位置仍然可以,但在整个 UIView 内。我需要在 UIView MINUS 中为部分索引保留 32 个神奇像素的中心... 标签宽度是动态的,我事先不知道是什么。因此必须在代码中调整标签框的大小以最小化它... 一方面,你写“标签不能调整大小”,另一方面,宽度是灵活的:/你在界面构建器中设置了flexibleWidth-“箭头”吗?否则在你的代码中写:label.autoresizingMask = UIViewAutoresizingMaskFlexibleWidth
左右不灵活
是的,这有点复杂 :) 无论如何,感谢您,现在已经解决了!我错过了一个视图:sectionHeader 是全尺寸的 tableView,32 像素的 middleView 和居中的标签。现在旋转很漂亮!以上是关于如何旋转 viewForHeaderInSection的主要内容,如果未能解决你的问题,请参考以下文章