我对iOS和Objective-C还是陌生的。
我一直在尝试以编程方式生成的UITableView
才能正常工作。该表使用了一个自定义UITableViewCell
,位于它自己的xib文件MeetingsTableViewCell
中。
.xib的外观如下:
日期字段的约束:
这是运行时的外观:
日期和会议模式图标/标签在模拟中距离右侧太远了55点(?)。
主视图控制器的宽度为320(我似乎无法更改该宽度)。 .xib的宽度为375(我似乎也无法更改)。 55分。巧合?我猜不是。
当我使用调试视图层次结构时,我发现“单元包装视图”为375点。我添加了以下代码(可能超出了所需的数量,但我只是在尝试一切以查看是否可以解决):
cell.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
cell.autoresizesSubviews = true;
cell.cellWrapperView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
cell.cellWrapperView.autoresizesSubviews = true;
我还确保在layoutIfNeeded
文件中有MeetingsTableCellView.m
,并添加了用于调整cellWrapperView
大小的代码
-(void)layoutIfNeeded {
[super layoutIfNeeded];
self.cellWrapperView.frame=self.contentView.bounds;
}
这样可以将视图正确调整为320,但是没有移动日期和会议模式图标/标签。
现在,调试视图如下所示:
TableCellView及其内部的所有全角物件宽320点。根据调试视图,日期和会议模式图标/标签(正确)宽68点。 X位置是297。我不知道如何将日期和会议模式图标/标签放置在正确的位置。
作为一个旁注,如果我将手机转到横向,这些宽度都是375而不是320,但是现在不应该是568吗?
谢谢!
编辑:创建表的代码。
self.meetings=meetings;
self.meetingsTable=[[UITableView alloc] initWithFrame:self.tableWrapperView.bounds];
self.meetingsTable.delegate = self;
self.meetingsTable.dataSource = self;
self.meetingsTable.autoresizesSubviews = true;
self.meetingsTable.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.tableWrapperView.autoresizesSubviews = true;
UINib *cellNib=[UINib nibWithNibName:@"MeetingCellView" bundle:nil];
[self.meetingsTable registerNib:cellNib forCellReuseIdentifier:@"MeetingsCell"];
[self.meetingsTable reloadData];
[self.tableWrapperView addSubview:self.meetingsTable];
答案 0 :(得分:3)
我认为您使事情变得有些复杂。
对于一个,您不需要“ cellWrapperView”- # Python 3.6, line 378 in `multiprocessing.pool.py`
if chunksize is None:
chunksize, extra = divmod(len(iterable), len(self._pool) * 4)
if extra:
chunksize += 1
if len(iterable) == 0:
chunksize = 0
做不到的任何目的。
第二,对于单元格布局,您在单元格类中不需要任何代码。
我做了一个快速测试,按照您的意愿(大约)布置了电池:
这是结果(我经常使用背景色来帮助查看元素框架):
仅通过此代码即可完成...
contentView
//
// MeetingsTableViewCell.h
//
#import <UIKit/UIKit.h>
@interface MeetingsTableViewCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UILabel *theTitleLabel;
@property (strong, nonatomic) IBOutlet UILabel *theSubTitleLabel;
@property (strong, nonatomic) IBOutlet UILabel *theDateLabel;
@property (strong, nonatomic) IBOutlet UIImageView *theImageView;
@property (strong, nonatomic) IBOutlet UILabel *theModeLabel;
@end
//
// MeetingsTableViewCell.m
//
#import "MeetingsTableViewCell.h"
@implementation MeetingsTableViewCell
@end
//
// TableXIBViewController.h
//
#import <UIKit/UIKit.h>
@interface TableXIBViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@end
并且,为了帮助正确放置单元xib,这是xib的来源:
//
// TableXIBViewController.m
//
// Created by Don Mag on 11/14/18.
//
#import "TableXIBViewController.h"
#import "MeetingsTableViewCell.h"
@interface TableXIBViewController ()
@property UITableView *meetingsTable;
@property UIView *tableWrapperView;
@end
@implementation TableXIBViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor redColor];
// inset the table wrapper view by 20-pts so we can see its frame
self.tableWrapperView = [[UIView alloc] initWithFrame:CGRectInset(self.view.frame, 20, 20)];
self.tableWrapperView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:self.tableWrapperView];
self.meetingsTable = [[UITableView alloc] initWithFrame:self.tableWrapperView.bounds];
self.meetingsTable.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.meetingsTable.dataSource = self;
self.meetingsTable.delegate = self;
[self.tableWrapperView addSubview:self.meetingsTable];
UINib *cellNib = [UINib nibWithNibName:@"MeetingCellView" bundle:nil];
[self.meetingsTable registerNib:cellNib forCellReuseIdentifier:@"MeetingsCell"];
}
- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
MeetingsTableViewCell *cell = [self.meetingsTable dequeueReusableCellWithIdentifier:@"MeetingsCell" forIndexPath:indexPath];
cell.theTitleLabel.text = [NSString stringWithFormat:@"Meeting Title %li", indexPath.row + 1];
cell.theSubTitleLabel.text = [NSString stringWithFormat:@"Meeting SubTitle %li", indexPath.row + 1];
cell.theDateLabel.text = [NSString stringWithFormat:@"2018/01/0%li", indexPath.row + 1];
return cell;
}
- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 5;
}
@end