gpt4 book ai didi

iOS 7 - 动态调整标签和 ScrollView 的高度

转载 作者:行者123 更新时间:2023-12-01 17:17:08 29 4
gpt4 key购买 nike

太好了...我在使用 iOS7/xcode5 上的 ScrollView 和适合文本标签时遇到问题,我对这个问题感到沮丧,因为在 iOS6/xcode4 上很容易处理这个问题...

这是我的代码的预览...

View Controller .h

#import <UIKit/UIKit.h>
#import "ViewControllerOther.h"

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@end

View Controller .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

这是输出

第一名 - http://i.imagefra.me/b52js8zk

第二 - http://i.imagefra.me/313js8zl

我在第二个 View 上的目标是根据文本的长度动态调整标签的高度,同时调整 ScrollView 的高度并使其可滚动......

笔记:
这只是我制作的一个示例项目,因此我可以提出这些问题。

更新1:

好的,所以我设法通过将代码从 viewDidLoad 方法转移到 viewWillLayoutSubviews 方法来使调整大小标签起作用,但不幸的是,当我把 [self.scroller setContentSize:CGSizeMake(320, 1000)];标签恢复正常大小。我错过了什么吗?

最佳答案

要使 UILabel 适合其内容,请使用 尺寸适合

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];

现在您可以使用标签的高度来动态设置 ScrollView 的 ContentSize。
[self.scroller setContentSize:CGSizeMake(self.scroller.frame.size.width,testLabel.frame.size.height)];

希望对你有帮助..

关于iOS 7 - 动态调整标签和 ScrollView 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21570395/

29 4 0