【问题标题】:UIView is not moving with UIscrollViewUIView 不与 UIscrollView 一起移动
【发布时间】:2012-10-12 05:15:48
【问题描述】:

我在 IB 中添加了一个视图。我在这个视图中有一个标签,它的高度会在运行时根据它所持有的文本而变化,现在我的问题是当标签大小变化时它超出了 UIView 的高度,所以我想在其中添加一个滚动视图此视图可查看完整标签。我已经添加了这样的滚动视图...

        CGRect scrollViewFrame = CGRectMake(0, 0, 320, 460);
        UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:scrollViewFrame];
        CGSize scrollViewContentSize = CGSizeMake(self.view.frame.size.width, 
                                                  (self.view.frame.size.height + 1000));
        [scrollView setContentSize:scrollViewContentSize];
        [self.view addSubview:scrollView];

在我的视图中添加此滚动视图后,当我向下滚动时,我的视图并没有向下移动。我在这里做错什么了吗...

感谢您的帮助..

【问题讨论】:

  • 你的 scarollview 帧高度不超过 uiview 所以可能会发生尝试 CGRect scrollViewFrame = CGRectMake(0, 0, 320, 460);更改高度 CGRect scrollViewFrame = CGRectMake(0, 0, 320, 560);或更多
  • @NitinGohel 我试过了,我的滚动视图正在下降,我的视图没有移动。 :(
  • @Unknown 我确实喜欢这样,对吧?能说的更具体点吗?
  • @Newbee 你试过设置 contentOffset 吗?
  • @CStreel 我现在做了。它仍然是一样的。我们需要为 self.view 激活任何属性吗?

标签: iphone ios uiview uiscrollview


【解决方案1】:

如果您的scrollView 是您的视图的子视图,那么当您滚动scrollView 时视图不会移动。如果您希望视图在滚动时移动,则反之亦然(视图必须是 scrollView 的子视图)。因此,例如,如果您有一个带有 UILabel 的 UIView 需要滚动,则视图层次结构将是:

UIView (self.view) -> UIScrollView (scrollView) -> UIView -> UILabel

或者,您实际上并不需要 UIView 来保存 UILabel,因此 UILabel 可以作为 UIScrollView 的子视图添加。

UIScrollView 只会滚动其中的内容。

【讨论】:

    【解决方案2】:

    试试这个代码.. 首先取UIView 并在您的新视图中添加UILable,就像下面的代码.. 就像一个流程..

        CGRect scrollViewFrame = CGRectMake(0, 0, 320, 460);
        UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:scrollViewFrame];
        CGSize scrollViewContentSize = CGSizeMake(self.view.frame.size.width, 
                                                  (self.view.frame.size.height + 1000));
        [yourView addSubview:yourLable];
        [scrollView addSubview:yourView];
        [scrollView setContentSize:scrollViewContentSize];
        [self.view addSubview:scrollView];
    

    希望对你有帮助……

    :)

    【讨论】:

    • 我通过 IB 添加的那个标签。我需要再次添加为子视图吗?
    • 是的,伙计,在这里你想用 scroolview 移动视图,然后首先添加 uiview,然后将这个标签添加为子视图.. :)
    • ok 将框架设置为你的 self.view 框架,就像这样 CGRect scrollViewFrame = self.view.frame;试试这个
    • 在你的 .h 文件中也提供 Delegate
    • 没有相同的 self.view 只有我要添加。什么代表?
    【解决方案3】:

    您应该将 labelView 添加到 ScrollView。从您的代码中,我可以看到您的滚动视图在您的视图内。可以这样想:

    您有一辆汽车(您的视图)并且您希望它滚动到您需要给它一条比汽车更长的道路(ScrollView)。当你应该把车放在马路上时,你正在做的是把马路放在车里。

    既然您使用的是 IB,我相信您应该:

    1. 将您的 ScrollView 添加到您的视图中(您的视图不会移动到任何地方)
    2. 将您的 labelView 添加到 scrollView 并将 scrollView 高度设置为您的 labelView 最终高度。

    另一个选项是在 IB 中添加滚动视图并将您的视图添加到您的滚动视图中。重要的是您的 ScrollView 将是道路,而您的其他视图将在道路上。

    【讨论】:

      【解决方案4】:

      您应该使用 UITextView 并将其作为子视图添加到您的滚动视图(滚动视图添加到 self.view):

      // NSString *yourLabelString = (Your Label String)
      
          CGSize constraint = CGSizeMake(320, 10000);
          CGSize size = [yourLabelString sizeWithFont:[UIFont systemFontOfSize:20] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];
      
          UITextView *yourTextView = [[UITextView alloc] init];
      
          yourTextView.frame = CGRectMake(0,0, size.width, size.height);
      [scrollview addSubview:yourTextView];
      
      scrollview.frame = CGRectMake(0, 0, 320, 460);
          scrollview.contentSize = CGSizeMake(size.width,size.height+20);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-06
        • 2020-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-21
        相关资源
        最近更新 更多