2011-03-30 148 views
0

UITableView有自定义标题UIView,其中包含UILabel。由于表格的右侧也有段索引,我想将标签居中放置在剩余空间中。如何旋转viewForHeaderInSection

enter image description here

问题是如何为“中心”的标签,同样,当设备旋转到的风景线!我已经尝试了Interface Builder和仅限代码,并且总是有错误。

限制:

  1. 标签是尽可能地窄
  2. 标签不能被调整大小
  3. 标签必须表宽度减去区段索引

一个简单的内部总是居中方法来解决这个问题将使节标题视图从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; 

任何想法表示欢迎!甚至无法回想有多少种不同的方式,我失败了:)

回答

0

嘿,设置如下在IB: 禁用所有自动调整功能(没有灵活的宽度,高度,或任何左,底部,顶部,右) 。

应该做的工作:)

要支持魔术32个像素,尝试,因为你需要它来定位标签。 这意味着: 将它放在你的UIView的中心并将其向左移动16个像素,现在不要以编程方式改变框架,否则“精彩”自动定位将被操纵,我们并不真正想要:)

+0

不,相对位置保持不变,但在整个UIView内。我需要UIView中的MINUS 32为节索引保留的魔法像素... – JOM 2011-03-30 13:34:46

+0

标签宽度是动态的,我不知道它是什么。因此,必须在代码中调整标签框以最大限度地减少它... – JOM 2011-03-30 14:02:19

+0

一方面,您写的“标签不得调整大小”,另一方面,宽度是灵活的:/您是否设置了柔性宽度 - “箭头”在界面生成器中?否则写在你的代码:'label.autoresizingMask = UIViewAutoresizingMaskFlexibleWidth'不灵活的左或右 – Lepidopteron 2011-03-30 14:06:52