如何为 UITableView tableHeaderView 设置比 UITableView 宽度更宽的宽度?

Posted

技术标签:

【中文标题】如何为 UITableView tableHeaderView 设置比 UITableView 宽度更宽的宽度?【英文标题】:How to set width for UITableView tableHeaderView that will be wider than UITableView width? 【发布时间】:2012-07-04 07:14:27 【问题描述】:

我在viewDidLoad 方法中创建了UITableView,如下所示:

_tableView = [[UITableView alloc] initWithFrame:CGRectMake(25.0, 0.0, 277.0, 393.0) style:UITableViewStyleGrouped];
mySearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)];
[self.tableViewLists setTableHeaderView:mySearchBar];
CGRect newFrame = mySearchBar.frame;
newFrame.size.width = newFrame.size.width + 50.0f;
newFrame.origin.x = newFrame.origin.x - 25.0f;
mySearchBar.frame = newFrame;
[self.tableViewLists setTableHeaderView:mySearchBar];

我想为UITableView tableHeaderView 添加UISearchBar,它将具有此框架:

CGRectMake(0.0f, 0.0f, 320.0f, 44.0f)

在我将我的UISearchBar 设置为UITableView tableHeaderView 之后,它的框架被拉伸为 UITableView 的宽度。我可以以某种方式更改 UISearchBar 的框架吗?

【问题讨论】:

在哪里设置 tableHeaderView 的宽度,在哪里添加搜索栏。你能添加那个代码吗? 【参考方案1】:

在我看来,将UISearchBar 放在宽度小于实际UISearchBarUITableView 中没有多大意义。我认为这将是拉伸它的默认行为(在这种情况下缩小它)。您可以查看此question/answer 以获得一些想法(主要是因为打印屏幕和一些答案)。我的建议是,UISearchBarUITableView 之上,就是这样......

【讨论】:

【参考方案2】:

带截图的完整代码

#import "PhotosViewController.h"

@implementation PhotosViewController

- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.


#pragma mark - View lifecycle

- (void)viewDidLoad


 UITableView *table=[[UITableView alloc] initWithFrame:CGRectMake(25.0,0.0, 277.0, 393.0) style:UITableViewStyleGrouped];

 table.delegate=self;
 table.dataSource=self;

 UISearchBar *searchBar=[[UISearchBar alloc] initWithFrame:CGRectMake(10.0f, 0.0f, 257.0f, 44.0f)];

 [table addSubview:searchBar];
 [self.view addSubview:table];

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


- (void)viewDidUnload

    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;


- (void)viewWillAppear:(BOOL)animated

    [super viewWillAppear:animated];


- (void)viewDidAppear:(BOOL)animated

    [super viewDidAppear:animated];


- (void)viewWillDisappear:(BOOL)animated

    [super viewWillDisappear:animated];


- (void)viewDidDisappear:(BOOL)animated

    [super viewDidDisappear:animated];


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

    // Return YES for supported orientations
 return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

 return  10;


// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

 static NSString *cellidentifier=@"cellidentifier";

 UITableViewCell *Cell=[tableView dequeueReusableCellWithIdentifier:cellidentifier];
 if (Cell==nil) 
  Cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellidentifier];
 

 Cell.textLabel.text=@"hello";
 return Cell;


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

 return 44;



@end

【讨论】:

但是当我滚动UITableView 时,我需要将UISearchBar 隐藏在UINavigationController 下... 在此代码中,当您滚动表格视图时,如果导航栏存在,它将隐藏导航栏后面的搜索栏

以上是关于如何为 UITableView tableHeaderView 设置比 UITableView 宽度更宽的宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UITableView tableHeaderView 设置比 UITableView 宽度更宽的宽度?

如何为 UITableView 设置分隔符样式 [重复]

如何为 UITableView 中的选定单元格制作透明背景

弹出键盘时如何为 UITableView 设置动画?

如何为 UITableView 部分标题动态设置背景颜色?

如何为 UITableView 索引事件添加操作 - 对于每个字母