【问题标题】:Set UIImageView Size?设置 UIImageView 大小?
【发布时间】:2011-02-11 05:56:53
【问题描述】:

我有以下问题:我在 UIScrollView 中生成子视图 UIView,包括 UIImageViews。

NSArray *bilder = [[NSArray alloc] initWithObjects:@"lol.jpg", @"lol2.jpg", nil];
NSArray *added = [[NSMutableArray alloc] init];
UIImageView *tmpView;

for (NSString *name in bilder) {
    UIImage *image = [UIImage imageNamed:name];
    tmpView = [[UIImageView alloc] initWithImage:image];
    tmpView.contentMode = UIViewContentModeScaleAspectFit;
    tmpView.frame = CGRectMake(0, 0, 300, 300);

    [added addObject:tmpView];

    [tmpView release];
}

CGSize framy = mainFrame.frame.size;

NSUInteger x = 0;

for (UIView *view in added) {
    [mainFrame addSubview:view];
    view.frame = CGRectMake(framy.height * x++, 0, framy.height, framy.width);
}

mainFrame.scrollEnabled = YES;
mainFrame.pagingEnabled = YES;
mainFrame.contentSize = CGSizeMake(framy.height * [added count], framy.width);
mainFrame.backgroundColor = [UIColor blackColor];

我从数组中获取图像文件名。现在我想将图像视图调整为特定大小,但它不起作用。有什么建议吗?

感谢+问候

【问题讨论】:

    标签: iphone objective-c ipad uiimageview size


    【解决方案1】:

    更改 tmpView.frame 以使用新的 CGRect:

    tmpView.frame = CGRectMake(tmpView.frame.origin.x,
                               tmpView.frame.origin.y,
                               newWidth,
                               newHeight);
    

    【讨论】:

    • 嗯,这实际上是我以前使用的相同代码,不是吗?也不起作用:(
    • 尝试使用 CGRectOffset 来简单地向下移动框架。那应该保持原始大小不变。临时设置所有视图的背景颜色也可能有所帮助,以确保 UIImageView 以外的所有内容都显示在您想要的位置。
    • 尝试使用 [[UIImageView alloc] initWithFrame:...] 并稍后设置图像。这应该是not affect the view's frame
    【解决方案2】:

    我看到的是:

    view.frame = CGRectMake(framy.height * x++, 0, framy.height, framy.width);
    

    但是如果你看一下 CGRectMake...

    Declaration: CGRect CGRectMake (
       CGFloat x,
       CGFloat y,
       CGFloat width,
       CGFloat height
    );
    

    您正在设置 X 值,而不是 Y 值。我预计,根据您后来的电话:

    mainFrame.contentSize = CGSizeMake(framy.height * [added count], framy.width);
    

    您打算让这些图像彼此重叠显示,而不是并排显示。

    建议:

    view.frame = CGRectMake(framy.height * x++, 0, framy.height, framy.width);
    

    view.frame = CGRectMake(0,framy.height * x++, framy.height, framy.width);
    

    【讨论】:

    • 这是横向模式,它们并排显示,但全屏显示。但我不想要全屏,我想要 300x300!
    • 然后它引导我: mainFrame.contentSize = CGSizeMake(framy.height * [add count], framy.width);你不想要:mainFrame.contentSize = CGSizeMake(framy.height, framy.widtht * [add count];
    【解决方案3】:

    UIImage 缺少NSImagesetSize: 方法,但this post 似乎使用UIImage 上的类别添加了scaleToSize: 方法。

    【讨论】:

    • 我试过这个,图像大小调整工作,但 imagebiréw 保持全屏。如何将 imageview 调整为调整后图像的大小?
    • 在调用[[UIImageView alloc] initWithImage:image] 之前是否调整了图像大小?我阅读initWithImage: 文档的方式应该会导致UIImageView 匹配图像大小。
    • 是的,实际上我制作 UIImage *image = [UIImage imageNamed:name];然后 UIImage *smallImage = [图像 scaleToSize:CGSizeMake(100,100)];然后我用 tmpView = [[UIImageView alloc] initWithImage:smallImage] 分配 UIIMageView但图像视图保持全屏,检查了背景色设置!
    • 我可以看到三个可能的原因(尽管它们似乎不太可能): 1. 您正在制作 100x100 的图像,但图像视图是 300x300; 2.tmpView.contentMode = UIViewContentModeScaleAspectFit;(我认为UIImage scaleToSize:不需要);和 3. 当UIImageView 被添加为子框架时,mainFrame 可能以某种方式导致尺寸错误。由于我自己不做任何 UIKit/iPhone 的东西(只是 AppKit/MacOSX),除此之外我几乎没有想法。
    • 哦,实际上,还有 1 个想法来尝试隔离问题,如果没有别的:在 initWithImage: 之后立即记录 UIImageView 的框架,在 tmpView.frame = ... 之后立即记录,在 @ 之前和之后987654337@,然后在view.frame = ... 之后,看看是否能提供任何线索,说明视图在哪里结束全屏。
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多