2012-08-09 54 views
0

我想显示图像,标题名称和两个左右按钮。我已经成功完成了。 下面是代码:在导航栏上放置自定义视图

UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 100)]; 

    UIButton *leftButton = [[UIButton alloc]init]; 
    [leftButton setImage:[UIImage imageNamed:@"previous-arrow.png"] forState:UIControlStateNormal]; 
    [leftButton addTarget:self action:@selector(goPrevious:) forControlEvents:UIControlEventTouchUpInside]; 
    [leftButton setFrame:CGRectMake(20, 50, 14, 13)]; 

    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Title.png"]]; 
    [imageView setFrame:CGRectMake(leftButton.frame.origin.x+leftButton.frame.size.width+4, 20, 50, 50)]; 

    UILabel *nameLabel = [[UILabel alloc]initWithFrame:CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+4, 30, 100, 40)]; 
    NSString *cName = [NSString stringWithFormat:@"%@",[NameArray objectAtIndex:indexPath.section]]; 

    [nameLabel setTextColor:[UIColor whiteColor]]; 
    [nameLabel setBackgroundColor:[UIColor clearColor]]; 
    [nameLabel setContentMode:UIViewContentModeScaleAspectFill]; 
    [nameLabel setTextAlignment:UITextAlignmentLeft]; 
    CGSize expectedLabelSize = [cName sizeWithFont:nameLabel.font 
             constrainedToSize:CGSizeMake(100, 40) 
              lineBreakMode:nameLabel.lineBreakMode]; 
    [nameLabel setFrame:CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+4, 35, expectedLabelSize.width, expectedLabelSize.height)]; 
    nameLabel.text=cName; 

    UIButton *rightButton = [[UIButton alloc]init]; 
    [rightButton setImage:[UIImage imageNamed:@"next-arrow.png"] forState:UIControlStateNormal]; 
    [rightButton setFrame:CGRectMake(nameLabel.frame.origin.x+nameLabel.frame.size.width+4, 50, 14, 13)]; 
    [rightButton addTarget:self action:@selector(next:) forControlEvents:UIControlEventTouchUpInside]; 

    [view addSubview:nameLabel]; 
    [view addSubview:imageView]; 
    [view addSubview:leftButton]; 
    [view addSubview:rightButton]; 

    self.navigationItem.titleView = view; 

此代码是用的cellForRowAtIndexPath。视图在导航栏上正确显示,但在滚动tableview之后。最初它显示在错误的坐标上。

请建议。

+0

您是否尝试使自定义视图的x坐标不依赖于左侧按钮,例如20?那它有用吗? (除了它不改变到按钮宽度当然)为什么在'cellForRowAtIndexPath'? – tomsmeding 2012-08-09 06:58:28

+0

需要在导航栏中显示的数据是从数组中收集并取决于Tableview。 – Arvind 2012-08-09 08:43:46

回答

2

将代码放入viewWillAppearviewDidAppear。这并不意味着在tableView协议中!

+0

这是我注意到的事情,也许确实有帮助,因为也许当表仍然初始化时它不能很好地处理子视图或什么东西:) – tomsmeding 2012-08-09 07:02:27

+0

当单元格初始化(“要显示”)它不知道所有细节关于它周围的景色,特别是它们的大小。那就是问题所在。 – 2012-08-09 07:07:46

+0

啊好的。是的,如果把它放在视图中可能会变得不那么好) – tomsmeding 2012-08-09 07:13:22