【问题标题】:Unable to implement simple view scrolling in iOS无法在 iOS 中实现简单的视图滚动
【发布时间】:2012-09-30 17:54:37
【问题描述】:

我很难在我的详细视图上实现简单的滚动。

该应用程序简单明了,带有主视图和详细视图。

当用户在 Master 上点击一个项目时,会推送 Detail 视图,其中包含更大的照片、博客文本等。

我希望滚动整个详细视图,因此如果图片很高,或者文字很长,他们可以垂直滚动以查看/阅读更多内容。我不希望用户单独滚动这些项目。感觉应该像网页滚动。

目前我的详细信息视图加载正常,但我无法使其滚动。

我的 DetailViewController.h

    #import <UIKit/UIKit.h>

    @interface DetailViewController : UIViewController {
        IBOutlet UILabel     *postTextLabel; // wired to Text Label
        IBOutlet UILabel     *postAuthorNameLabel; // wired to Author Label
    }

    @property (strong, nonatomic) id detailItem;
    @end

我的DetailViewController.m

#import "DetailViewController.h"

@interface DetailViewController ()
- (void)configureView;
@end

@implementation DetailViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self configureView];
}

- (void)configureView
{
    if (self.detailItem) {
        NSDictionary *post           = self.detailItem;
        NSString     *postText       = [post objectForKey:@"post_text"];
        NSString     *postAuthorName = [post objectForKey:@"post_author_name"];

        postTextLabel.text       = postText;
        postAuthorNameLabel.text = postAuthorName;
    }
}
@end

IB 结构:

对完成这项工作缺少什么有什么想法吗?

【问题讨论】:

  • 信息不足。但是... 1) 在您的UIScrollView 中是否将scrollEnabled 设置为YES? 2) 你的UIScrollView 中的contentSizeframe 大吗?
  • 3) 将您的.h.m.xib 文件放在某处,以便我们查看。
  • @RobertVojta h 和 m 文件如上 - 没有 xib 文件,因为我使用的是 XCode 4.5 - 还有其他建议吗?
  • 如果你确实使用故事板,那么.storyboard

标签: objective-c ios ios5 uiview uiscrollview


【解决方案1】:

我会做以下事情:

1)(可选)通过将您的视图拖到侧面的结构列表中的视图中,将其变为滚动视图。

2) 将 scrollView 链接到您的 viewcontroller .h 并进行类似这样的 Outlet 连接

@property (strong, nonatomic) IBOutlet UIScrollView *scroller;

(如果手动添加,请确保在 .m 中添加 @synthesize) 并确保它已在 IB 中连接!

3)在viewDidLoad方法中设置scrollview的contentsize

scroller.contentSize =  CGSizeMake(320,550);

注意:IBOutlet UILabel *postTextLabel;实际上应该是一个 UITextView 所以你可以访问 ContentSize 这将允许以下内容。

CGRect frame = postTextLabel.frame;
frame.size = postTextLabel.contentSize;
postTextLabel.frame = frame;
scroller.contentSize = CGSizeMake(320, frame.size.height+200);//200 or how ever much space is above the textView

只有在你使用 UITextView 时才有效

对于 ipad,将 320 替换为 768 或 1024,或视方向而定

在 IB 中连接它的最佳方法是这样按住控件并拖动到 .h 文件 并确保它设置为如图中的自动,并指向>您视图的.h。 像这样添加它也会自动为您添加@synthesize。

确保在此处为我们的滚动视图选中 UserInteractionsEnabled

【讨论】:

  • 处理您的建议 - 我应该将项目 [3] 及以下的代码放在哪里?
  • 解析器给出use of undeclared identifier 'scroller' did you mean '_scroller'?
  • 我把它加到了答案中,因为我忘了把它放在哪里。
  • 你忘了添加@synthesize scroller; 在.m 文件的@implementation 下添加它
  • 再一次,确保您已连接到 IB!您必须添加连接按住控件并从滚动视图拖动一条线到实现....如果您在连接时遇到问题,我将添加一张图片。
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 2013-08-03
  • 2017-04-26
  • 2013-11-07
  • 2012-08-21
  • 2016-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多