Sooo ...我在使用iOS7 / xcode5上的scrollview和fit文本标签时遇到了问题,我对此问题感到沮丧,因为在iOS6 / xcode4上很容易处理这个...
以下是我的代码预览......
ViewController.h
#import <UIKit/UIKit.h>
#import "ViewControllerOther.h"
@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITableView *tableview;
@property (strong, nonatomic) NSArray *meepo;
@property (strong, nonatomic) NSArray *icon;
@property (strong, nonatomic) NSArray *taunt;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableview setDataSource:self];
[self.tableview setDelegate:self];
self.meepo = [[NSArray alloc] initWithObjects:
@"Meepo No. 1",
@"Meepo No. 2",
@"Meepo No. 3",
@"Meepo No. 4",
@"Meepo No. 5",
nil];
self.icon = [[NSArray alloc] initWithObjects:
[UIImage imageNamed:@"meepo.jpg"],
[UIImage imageNamed:@"meepo.jpg"],
[UIImage imageNamed:@"meepo.jpg"],
[UIImage imageNamed:@"meepo.jpg"],
[UIImage imageNamed:@"meepo.jpg"],
nil];
self.taunt = [[NSArray alloc] initWithObjects:
@"Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, Meepo No. 1 reporting, ",
@"Meepo No. 2 reporting, Meepo No. 2 reporting, Meepo No. 2 reporting, Meepo No. 2 reporting, Meepo No. 2 reporting, Meepo No. 2 reporting, Meepo No. 2 reporting, Meepo No. 2 reporting, Meepo No. 2 reporting, Meepo No. 2 reporting, Meepo No. 2 reporting, Meepo No. 2 reporting, ",
@"Meepo No. 3 reporting, Meepo No. 3 reporting, Meepo No. 3 reporting, Meepo No. 3 reporting, Meepo No. 3 reporting, Meepo No. 3 reporting, Meepo No. 3 reporting, Meepo No. 3 reporting, Meepo No. 3 reporting, Meepo No. 3 reporting, Meepo No. 3 reporting, ",
@"Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, Meepo No. 4 reporting, ",
@"Meepo No. 5 reporting, Meepo No. 5 reporting, Meepo No. 5 reporting, Meepo No. 5 reporting, Meepo No. 5 reporting, Meepo No. 5 reporting, Meepo No. 5 reporting, Meepo No. 5 reporting, Meepo No. 5 reporting, Meepo No. 5 reporting, Meepo No. 5 reporting, ",
nil];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.meepo count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
NSString *meepos = [self.meepo objectAtIndex:indexPath.row];
UIImage *icon = [self.icon objectAtIndex:indexPath.row];
[cell.textLabel setText:meepos];
cell.imageView.image = icon;
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ViewControllerOther *other = [self.storyboard instantiateViewControllerWithIdentifier:@"Delegate"];
other.meepono = [self.meepo objectAtIndex:indexPath.row];
other.index = [self.taunt objectAtIndex:indexPath.row];
[self.navigationController pushViewController:other animated:YES];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
ViewControllerOther.h
#import <UIKit/UIKit.h>
@interface ViewControllerOther : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *meepo;
@property (weak, nonatomic) IBOutlet UILabel *taunt;
@property (weak, nonatomic) IBOutlet UIScrollView *scroller;
@property (nonatomic, strong) NSString *meepono;
@property (nonatomic, strong) NSString *index;
@end
ViewControllerOther.m(*)
#import "ViewControllerOther.h"
@interface ViewControllerOther ()
@end
static CGRect size;
static CGSize maxSize;
static CGRect labelRect;
@implementation ViewControllerOther
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.meepo setText:self.meepono];
[self.scroller setScrollEnabled:YES];
labelRect = [self.taunt frame];
}
- (void)viewWillAppear:(BOOL)animated
{
}
-(void)viewWillLayoutSubviews
{
[self.taunt setNumberOfLines:0];
[self.taunt setText:self.index];
maxSize = CGSizeMake(self.taunt.frame.size.width, MAXFLOAT);
size = [self.taunt.text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.taunt.font} context:nil];
labelRect.size.height = size.size.height;
[self.taunt setFrame:labelRect];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (IBAction)sample:(id)sender {
[self.scroller setContentSize:CGSizeMake(320, 1000)];
}
@end
这是输出
1st - http://i.imagefra.me/b52js8zk
第二名 - http://i.imagefra.me/313js8zl
我在第二个视图上的目标是根据文本的长度动态调整标签的高度,同时调整滚动视图的高度并使其可滚动...
注意: 这只是我做的一个示例项目,所以我可以问这些问题。
更新1:
好的,所以我设法通过将代码从viewDidLoad方法转移到viewWillLayoutSubviews方法来使调整大小标签工作,但不幸的是,当我将[self.scroller setContentSize:CGSizeMake(320, 1000)];
标签恢复到正常大小时。我错过了什么吗?
答案 0 :(得分:13)
要使UILabel符合其内容,请使用 sizeToFit
1)将行数设置为零yourLabel.numberOfLines = 0; //重要的事情
2)设置文本调用sizeToFit [YourLabel sizeToFit];
3)这将根据其内容动态调整标签的高度。
UILabel *testLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,0,320,100)];
testLabel.numberOfLines = 0;
testLabel.text = @"add your string here";
[testLabel sizeToFit];
现在您可以使用label的高度动态设置scrollview的ContentSize。
[self.scroller setContentSize:CGSizeMake(self.scroller.frame.size.width,testLabel.frame.size.height)];
希望这会对你有帮助..