Ios 基于Uiwebview内容的UIScrollview高度更改

Ios 基于Uiwebview内容的UIScrollview高度更改,ios,uiwebview,uiscrollview,Ios,Uiwebview,Uiscrollview,我正试图根据我的UIWebView内容设置UIScrollView的高度 我在故事板中使用自动布局,目标是ios7 我知道如何通过以下代码将大小硬编码到UIScrollView的高度: -(void) viewDidLayoutSubviews{ UIScrollView *sv = (UIScrollView *)[self.view viewWithTag:30]; sv.contentSize = CGSizeMake(0,1200); } 以及如何根据内容设置UIWe

我正试图根据我的
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
@接口NBViewController()
@属性(非原子,强)NSMutableDictionary*imageDownloadsInProgress;
@结束
@视图控制器的实现
-(无效)viewDidLoad
{
[超级视图下载];
self.imageDownloadsInProgress=[NSMutableDictionary];
CGFloat xOffset=0;
if(UI\u USER\u INTERFACE\u IDIOM()==UIUserInterfaceIdiomPad){
xOffset=224;
}
pullRightView=[[PullableView alloc]initWithFrame:CGRectMake(0,200,200,300)];
pullRightView.backgroundColor=[UIColor lightGrayColor];
pullRightView.openedCenter=CGPointMake(100200);
pullRightView.closedCenter=CGPointMake(-70200);
pullRightView.center=pullRightView.closedCenter;
pullRightView.animate=否;
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=@“用户名”;
label.transform=CGAffineTransformMakeRotation(-M_PI_2);
label.center=CGPointMake(185,80);
[pullRightView添加子视图:标签];
NSString*s=self.body;
s=[@“stringByAppendingString:s];
s=[s stringByAppendingString:@'';
UIWebView*bweb=(UIWebView*)[self.view-view-withtag:3];
UIImageView*uimg=(UIImageView*)[self.view视图带标记:20];
UILabel*标题=(UILabel*)[self.view视图带标记:2];
uimg.image=self.NBimage;
[标题设置文本:self.Titles];
bweb.delegate=self;
[bweb loadHTMLString:s baseURL:nil];
bweb.scrollView.scrollEnabled=否;
bweb.scrollView.bounces=否;
}
-(无效)ViewDidLayoutSubView{
UIScrollView*sv=(UIScrollView*)[self.view视图带标记:30];
if((self.cellhightforwebview!=nil)){
NSLog(@“非空输入%d”,(int)*(self.cellHightForWebView));
如果((int)*(self.cellHightForWebView)>0){
NSLog(@“零以上输入%d”,(int)*(self.cellhightforwebview));
sv.contentSize=CGSizeMake(0,(int)*(self.cellhightforwebview));
}
}否则{
NSLog(@“aaaa%d”,1200);
sv.contentSize=CGSizeMake(01200);
}
}
-(无效)未收到记忆警告
{
[超级记忆警告];
NSArray*allDownloads=[self.imageDownloadsInProgress allValues];
[所有下载makeObjectsPerformSelector:@selector(cancelDownload)];
[self.imagedownloads正在删除所有对象];
}
-(void)webview加载:(UIWebView*)bweb
{
CGRect frame=bweb.frame;
框架尺寸高度=5.0f;
bweb.frame=框架;
}
-(无效)视图显示:(BOOL)动画
{
[超级视图显示:动画];
}
-(无效)webViewDidFinishLoad:(UIWebView*)bweb{
NSLog(“完成加载”);
CGSize-mWebViewTextSize=[bweb大小匹配:CGSizeMake(1.0f,1.0f)];
CGRect mWebViewFrame=bweb.frame;
mWebViewFrame.size.height=mWebViewTextSize.height;
self.cellHightforWebView=&(mWebViewFrame.size.height);
bweb.frame=mWebViewFrame;
NSLog(@“%f”,*self.cellHightForWebView);
bweb.scrollView.scrollEnabled=否;
bweb.scrollView.bounces=否;
UIScrollView*sv=(UIScrollView*)[self.view视图带标记:30];
sv.contentSize=CGSizeMake(0,*(self.cellhightforwebview));
[自视图DidLayoutSubview];
}
-(无效)bweb:(UIWebView*)bweb DIDFAILLOADWERROR:(NSError*)错误{
NSLog(@“错误加载”);
}
@结束
情节提要截图:


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

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

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

您在UIScrollView上有其他视图,还是只有UIScrollView上的UIWebView?是的,我还有两个其他视图(uiimageview,标签)。它们都在uiscrollview内部。您是在webview下方还是上方添加imageview和标签?你能制作一张图片并附上它,这样我就可以理解你的视图应该是什么样子吗?当然,我添加了故事板的屏幕截图。谢谢你的回答。问题是我想在屏幕上使用自动布局功能。这就是我使用“viewDidLayoutSubviews”的原因。