UIScrollVIew 中的 UIView 不更新视图

Posted

技术标签:

【中文标题】UIScrollVIew 中的 UIView 不更新视图【英文标题】:UIView in UIScrollVIew not updating views 【发布时间】:2012-06-17 15:09:54 【问题描述】:

我在 UIScrollView 中放置了一个 UIView。有一种方法称为更新 UI,它基本上会更新 UI。但是,加载数据后,我需要向下滚动一点才能看到呈现的 UI。 例如,我尝试的一件事是在 layoutSubviews 中隐藏 UITableView 并在 updateUI 中取消隐藏,但是我需要在 UIScrollView 上向下滚动一点,直到看到 UITableView。为什么会这样?这是我更新的 UI 代码:

这个 updateUI 代码基本上是在 UIScrollView 不滚动时触发的。我有一个带有 UIScrollView 的 MyViewController,它实现了 UIScrollView 委托,基本上,当它不滚动时,它会委托回我的 UIView,告诉您现在可以更新视图。

- (void) updateUI

    self.isScrolling = NO;

    NSLog(@"UPDATE UI");

    AHMyImageData *object = self.object;

    if ([object isNotNull])

    [self.tableView_ reloadData];

    if (![self.userProfileImage_.image isNotNull])
        [self.userProfileImage_ setImageWithURL:[NSURL URLWithString:object.profilePicture_] andAnimate:YES];
    

    if (![self.imageView_.image isNotNull])
        NSString *url = [[object.image_ valueForKey:@"low_resolution"] valueForKey:@"url"];
        [self.imageView_ setImageWithURL:[NSURL URLWithString:url] andAnimate:YES];
    

    if (object.userHasLiked)
        [self.likeButton_ setImage:[UIImage imageNamed:@"btn-like-down.png"] forState:UIControlStateNormal];
     else 
        [self.likeButton_ setImage:[UIImage imageNamed:@"btn-like.png"] forState:UIControlStateNormal];
    

    if ([object.text_ isNotNull])
        NSMutableAttributedString * attributedString = [NSMutableAttributedString attributedStringWithString:object.text_];
        [attributedString setFont:[UIFont fontWithName:@"HelveticaNeue" size:15]];
        [self.titleLabel_ setAttributedText:attributedString];
        [self parseTagsInComment:object.text_];
    

    NSMutableAttributedString * usernameAttributedString = [NSMutableAttributedString attributedStringWithString:object.username_];
    [usernameAttributedString setFont:[UIFont fontWithName:@"HelveticaNeue" size:14]];
    [usernameAttributedString setTextColor:[UIColor colorWithRed:86.0/255.0 green:134.0/255.0 blue:172.0/255.0 alpha:1.0] range:NSMakeRange(0, [object.username_ length])];
    [usernameAttributedString setTextBold:YES range:NSMakeRange(0, [object.username_ length])];

    [self.usernameLabel_ setAttributedText:usernameAttributedString];

    NSString * imageCreatorUsernameURL = [NSString stringWithFormat:@"userid://%@", object.userId_];
    [self.usernameLabel_ addCustomLink:[NSURL URLWithString:imageCreatorUsernameURL] inRange:NSMakeRange(0, [object.username_ length])];
    [self.usernameLabel_ setUnderlineLinks:NO];
    [self.usernameLabel_ setDelegate:self];

    [self.likesCountLabel_ setText:[NSString stringWithFormat:@"%d", object.likesCount]];
    [self.commentsCountLabel_ setText:[NSString stringWithFormat:@"%d", object.commentsCount]];

    if ([object.createdTime_ isNotNull])
        [self.imageTimePostedLabel_ setText:[NSString timestampToString:object.createdTime_]];
    


    [self setNeedsDisplay];
    [self setNeedsLayout];

     else 
        NSLog(@"OBJECT IS NULL");
    

【问题讨论】:

听起来好像您是从UIScrollViewDelegate 方法调用updateUIView - 如果这是真的,是哪一个? 【参考方案1】:

尝试调用...

[self.tableView_ reloadData];
// I think you need to call reloadData only
// AFTER you do all your fun updating stuff
[self setNeedsDisplay];
[self setNeedsLayout];

在函数的最后,而不是一开始。希望对您有所帮助!

【讨论】:

以上是关于UIScrollVIew 中的 UIView 不更新视图的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview 中的 UIView 中的 UITableView :点击时 UITableView 数据被清除

自定义 UIView 中的 UIScrollView 不滚动

UIScrollView中的UIView不出现

在 UIScrollview 中的 UIView 上的屏幕中的框架

在uiscrollview中的多个uiview之间传递数据

UIScrollVIew 中的 UIView 不更新视图