表视图占据整个视图而不是输入宽度和高度

时间:2013-04-05 19:04:59

标签: iphone ios objective-c xcode restkit

我想在我的应用中使用相对较小的表格视图。但我似乎没有运气,因为桌面视图占据了整个屏幕。

 -(void)viewDidLoad{
 UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 20.0, 60.0) style:UITableViewStylePlain];

   self.view = tableView;
 }

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyCellIdentifier = @"MyCellIdentifier";

UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:MyCellIdentifier];

if(cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyCellIdentifier];
}

return cell;
   }

  - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 5;
  }

3 个答案:

答案 0 :(得分:3)

在viewDidLoad方法中,将self.view = tableView替换为

[self.view addSubview:tableView];

答案 1 :(得分:0)

您必须创建一个属性并为tableView命名:

  

@property(强,非原子)IBOutlet UITableView * myTableView;

之后你必须连接代表并执行

  

@synthesize myTableView;

然后使用你的代码:

  

myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0,0.0,20.0,60.0)样式:UITableViewStylePlain];

没有这个 - > self.view = tableView;

答案 2 :(得分:0)

我经常遇到这个问题。根据我的经验处理这个问题的最佳方法是创建一个容器视图控制器,它将表vc作为子vc。

我创建了一个简单的类来管理它。你可以在IB中设置vc。

#import <UIKit/UIKit.h>


@interface ContainerViewController : UIViewController

@property (weak, nonatomic) IBOutlet UIView *contentViewPlaceholderView;
@property (strong, nonatomic) IBOutlet UIViewController *contentViewController;

@end

#import "ContainerViewController.h"

@interface ContainerViewController ()

@property (assign, nonatomic)BOOL isContentVCAdded;

@end

@implementation ContainerViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        [self setup];
    }

    return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        [self setup];
    }

    return self;
}

- (void)setup
{
    self.isContentVCAdded = NO;
}

- (void)insertAndShowContentVC
{
    [self removeAllChildVCs];
    self.contentViewController.view.frame = self.contentViewPlaceholderView.bounds;
    [self addChildViewController:self.contentViewController];
    [self.contentViewPlaceholderView addSubview:self.contentViewController.view];
    [self.contentViewController didMoveToParentViewController:self];
    self.isContentVCAdded = YES;
}

- (void)removeAllChildVCs
{
    for (UIViewController *vc in self.childViewControllers) {
        [vc willMoveToParentViewController:nil];
        [vc.view removeFromSuperview];
        [vc removeFromParentViewController];
    }
}

- (void)setContentViewController:(UIViewController *)contentVC
{
    _contentViewController = contentVC;
    if (contentVC == nil) {
        [self removeAllChildVCs];
    }
    else {
        [self insertAndShowContentVC];
    }
}

#pragma mark Lifecycle

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    if (nil != _contentViewController && !self.isContentVCAdded) {
        [self insertAndShowContentVC];
    }
} 

@end

您只需要创建一个contentViewPlaceholderView(在IB或代码中),它具有您希望表视图具有的帧。然后,您只需根据需要创建表格vc,并将其设置为contentViewController

ContainerViewController