我正在开发一个应用程序,其中要求部分的标题应该在右侧而不是默认的左侧。
我搜索过,许多极客建议实施:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
static UIView *headerView;
if (headerView != nil)
return headerView;
NSString *headerText = NSLocalizedString(@"البحث الأخيرة", nil);
// set the container width to a known value so that we can center a label in it
// it will get resized by the tableview since we set autoresizeflags
float headerWidth = 150.0f;
float padding = 10.0f; // an arbitrary amount to center the label in the container
headerView = [[UIView alloc] initWithFrame:CGRectMake(300, 0.0f, headerWidth, 44.0f)];
headerView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
// create the label centered in the container, then set the appropriate autoresize mask
UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(padding, 0, headerWidth - 2.0f * padding, 44.0f)];
headerLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
headerLabel.textAlignment = UITextAlignmentRight;
headerLabel.text = headerText;
[headerView addSubview:headerLabel];
return headerView;
}
但是,当我尝试增加Header视图框的x坐标时,它不会影响视图的位置。它始终位于表格视图的中心。
我需要标题在右边。
答案 0 :(得分:15)
这对我有用,但是根据你的需要使用框架的坐标进行调整
-(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UILabel *label = [[UILabel alloc] init];
label.text=@"header title";
label.backgroundColor=[UIColor clearColor];
label.textAlignment = NSTextAlignmentRight;
return label;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 50;
}
答案 1 :(得分:7)
我无法使用上述解决方案更改文本,这对我和从表格视图的后缘有适当间距的位置起作用。 Swift中的PS解决方案
UITableViewDataSource
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 30
}
的UITableViewDelegate
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "Header Title"
}
func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
let header: UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView
header.textLabel?.font = UIFont(name: "AvenirNext-Regular", size: 14.0)
header.textLabel?.textAlignment = NSTextAlignment.Right
}
答案 2 :(得分:0)
所有我不会用
创建uiview headerView = [[UIView alloc] initWithFrame:CGRectMake(300, 0.0f, headerWidth, 44.0f)];
由于你的原点x坐标是300.对于标题和页脚视图,你的原点坐标设置为CGPoint(0.0),只是玩大小。
尝试使标签与自身视图一样大,并将其对齐方式设置为正确。
UIView *headerTitleView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 40)];
UILabel *sectionTitleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, headerTitleView.frame.size.width, 40)];
sectionTitleLabel.backgroundColor = [UIColor clearColor];
sectionTitleLabel.textAlignment = UITextAlignmentright;
另一种可能性是在标题视图右侧的某处添加一个UIlabel,中心对齐。
答案 3 :(得分:0)
我不确定我是否理解这种情况,但我认为你只是希望标签对齐而不是左对齐。
调整标题视图的帧值将不起作用,因为tableView负责定位它,它将忽略您在此处设置的任何值。
您唯一的选择是使用headerView的子视图。
示例,将headerLabel位置设置为右对齐:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
static UIView *headerView;
if (headerView != nil)
return headerView;
NSString *headerText = NSLocalizedString(@"البحث الأخيرة", nil);
float headerWidth = 320.0f;
float padding = 10.0f;
headerView = [[UIView alloc] initWithFrame:CGRectMake(300, 0.0f, headerWidth, 44.0f)];
headerView.autoresizesSubviews = YES;
// create the label centered in the container, then set the appropriate autoresize mask
UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, headerWidth, 44.0f)];
headerLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth;
headerLabel.textAlignment = UITextAlignmentRight;
headerLabel.text = headerText;
CGSize textSize = [headerText sizeWithFont:headerLabel.font constrainedToSize:headerLabel.frame.size lineBreakMode:UILineBreakModeWordWrap];
headerLabel.frame = CGRectMake(headerWidth - (textSize.width + padding), headerLabel.frame.origin.y, textSize.width, headerLabel.frame.size.height);
[headerView addSubview:headerLabel];
return headerView;
}