【问题标题】:UIScrollview height change base on Uiwebview ContentsUIScrollview 高度变化基于 Uiwebview 内容
【发布时间】:2014-03-09 08:21:04
【问题描述】:

我试图根据我的UIWebView 内容设置UIScrollView 的高度。

我在故事板中使用自动布局,目标是 ios7。

我知道如何通过此代码将大小硬编码为 UIScrollView 的高度:

-(void) viewDidLayoutSubviews{
     UIScrollView *sv = (UIScrollView *)[self.view viewWithTag:30];
    sv.contentSize = CGSizeMake(0,1200);
}

以及如何根据内容设置UIWebView 高度:

- (void)webViewDidStartLoad:(UIWebView *)bweb
{
    CGRect frame = byweb.frame;

    frame.size.height = 5.0f;

    bweb.frame = frame;
}
-(void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

}
- (void)webViewDidFinishLoad:(UIWebView *)bweb{
    CGSize mWebViewTextSize = [bweb sizeThatFits:CGSizeMake(1.0f, 1.0f)];
    CGRect mWebViewFrame = bweb.frame;
    mWebViewFrame.size.height = mWebViewTextSize.height;
    self.cellhieghtforwebview = &(mWebViewFrame.size.height);
    bweb.frame = mWebViewFrame;
    bweb.scrollView.scrollEnabled = NO;
    bweb.scrollView.bounces = NO;
    UIScrollView *sv = (UIScrollView *)[self.view viewWithTag:30];
    sv.contentSize = CGSizeMake(0, *(self.cellhieghtforwebview));
    [self viewDidLayoutSubviews];
}

但是设置UIWebView的高度后不知道怎么设置scrollview的高度

这是总代码:

@interface NBViewController () <UIWebViewDelegate,UIScrollViewDelegate>
@property (nonatomic, strong) NSMutableDictionary *imageDownloadsInProgress;
@end


@implementation NBViewController

- (void)viewDidLoad
{

    [super viewDidLoad];
    self.imageDownloadsInProgress = [NSMutableDictionary dictionary];
    CGFloat xOffset = 0;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        xOffset = 224;
    }

    pullRightView = [[PullableView alloc] initWithFrame:CGRectMake(0, 200, 200, 300)];
    pullRightView.backgroundColor = [UIColor lightGrayColor];
    pullRightView.openedCenter = CGPointMake(100, 200);
    pullRightView.closedCenter = CGPointMake(-70, 200);
    pullRightView.center = pullRightView.closedCenter;
    pullRightView.animate = NO;

    pullRightView.handleView.backgroundColor = [UIColor darkGrayColor];
    pullRightView.handleView.frame = CGRectMake(170, 0, 30, 300);

    [self.view addSubview:pullRightView];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 160, 30)];
    label.backgroundColor = [UIColor darkGrayColor];
    label.textColor = [UIColor whiteColor];
    label.text = @"User name";
    label.transform = CGAffineTransformMakeRotation(-M_PI_2);
    label.center = CGPointMake(185, 80);

    [pullRightView addSubview:label];

    NSString *s = self.Bodys;
    s =  [@"<html dir=\"rtl\">" stringByAppendingString:s];
    s = [s stringByAppendingString:@"</html>"];
    UIWebView *bweb = (UIWebView *)[self.view viewWithTag:3];
    UIImageView *uimg = (UIImageView *)[self.view viewWithTag:20];
    UILabel *title = (UILabel *)[self.view viewWithTag:2];

    uimg.image = self.NBimage;
    [title setText:self.Titles];
    bweb.delegate = self;
    [bweb loadHTMLString:s baseURL:nil];
    bweb.scrollView.scrollEnabled = NO;
    bweb.scrollView.bounces = NO;
}
-(void) viewDidLayoutSubviews{
     UIScrollView *sv = (UIScrollView *)[self.view viewWithTag:30];
    if((self.cellhieghtforwebview != nil)){
        NSLog(@"not null enter %d" , (int)*(self.cellhieghtforwebview));
        if((int)*(self.cellhieghtforwebview) > 0){
        NSLog(@"above zero enter %d" , (int)*(self.cellhieghtforwebview));

     sv.contentSize = CGSizeMake(0,(int)*(self.cellhieghtforwebview));
            }
    }else{
        NSLog(@"aaaa %d" ,  1200);
    sv.contentSize = CGSizeMake(0,1200);
    }
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

    NSArray *allDownloads = [self.imageDownloadsInProgress allValues];
    [allDownloads makeObjectsPerformSelector:@selector(cancelDownload)];
    [self.imageDownloadsInProgress removeAllObjects];
}

- (void)webViewDidStartLoad:(UIWebView *)bweb
{
    CGRect frame = bweb.frame;

    frame.size.height = 5.0f;

    bweb.frame = frame;
}
-(void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}
- (void)webViewDidFinishLoad:(UIWebView *)bweb{
    NSLog(@"finish loading");
    CGSize mWebViewTextSize = [bweb sizeThatFits:CGSizeMake(1.0f, 1.0f)]; 
    CGRect mWebViewFrame = bweb.frame;
    mWebViewFrame.size.height = mWebViewTextSize.height;
    self.cellhieghtforwebview = &(mWebViewFrame.size.height);
    bweb.frame = mWebViewFrame;
    NSLog(@"%f",*self.cellhieghtforwebview);
    bweb.scrollView.scrollEnabled = NO;
    bweb.scrollView.bounces = NO;
    UIScrollView *sv = (UIScrollView *)[self.view viewWithTag:30];
    sv.contentSize = CGSizeMake(0, *(self.cellhieghtforwebview));
    [self viewDidLayoutSubviews];
}

-(void)bweb:(UIWebView *)bweb didFailLoadWithError:(NSError *)error {
   NSLog(@"error loading");
}

@end

故事板截图:

【问题讨论】:

  • 您在 UIScrollView 上有其他视图还是在 UIScrollView 上只有 UIWebView?
  • 是的,我还有另外两个视图(uiimageview,标签)。它们都在 uiscrollview 里面。
  • 您是在 webview 下方还是上方添加图像视图和标签?您能否制作一张图片并附上,以便我了解您的视图应该是什么样子?
  • 确定我添加了故事板的屏幕截图

标签: ios uiwebview uiscrollview


【解决方案1】:

如果您使用自动布局,则 UIScrollview 高度的调整大小将无效。从 IB 关闭自动布局,然后尝试设置 UIScrollView 的高度。

取消选中该选项,然后尝试调整滚动视图的大小。希望这可以帮助。 :)

编辑: 请参阅this 问题,这可能会有所帮助。

【讨论】:

  • 感谢回答问题是我想使用自动布局功能。这就是我使用“viewDidLayoutSubviews”的原因。
猜你喜欢
  • 1970-01-01
  • 2011-04-24
  • 2019-06-15
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 2018-09-07
  • 2022-01-20
相关资源
最近更新 更多