我需要创建一个带有长文本的discaimer屏幕(本地化为不同的语言)。
用户应向下滚动到文本的底部,然后看到“同意”按钮。
由于警报相当有限,我创建了一个UIViewController,并将ScrollView放入其中。
现在我把一个TextView放到这个Scrollview中 - 但问题是这个TextView本身不应该是可滚动的,但它应该具有它所拥有的完整文本所需的确切大小(当然每个语言和总是超过屏幕高度可以保持不滚动)然后在那个长TextView我需要定位UIButton。
TextView + Button都在ScrollView中。
由于UITextView具有不同的高度,具体取决于当前语言 - 如何正确设置此完整屏幕 - 理想情况下使用IB。或者如果不可能以编程方式进行?
还是有一种完全不同的简单方法吗?
答案 0 :(得分:2)
将UILabel(行数设置为0)及其下方的按钮添加到滚动视图中。设置约束,以便按钮在标签底部具有垂直间距约束。为标签指定固定宽度约束和高度约束。将IBOutlet设置为高度约束,并使用从sizeWithFont获得的值调整代码中该约束的常量参数:constrainedToSize:lineBreakMode:。您还需要使用相同的值以及适合按钮所需的大小来调整滚动视图的contentSize。这将导致标签根据其包含的文本具有正确的高度,并且您的按钮将始终位于该标签下方的设定距离。
- (void)viewDidLoad {
[super viewDidLoad];
self.label.text = @"dfkl;jfjdfkjf sdfl klf;jskdl;fja skfjdklfj skdlfjs dklfjsklfj sklfjskl;f jks;alfjsk;lfjs;klfj;kfjs;kljk;lfjskdfj;klf j;klf jkl;fj;klfj;klfj k;fs;klfjsk;lfj ;klfjk;alfjk;alfjk;lfjk;lfjlkf kl;ajf akl;sfj sk;fk;lfjsk;ldfjsk;lfjsk;lfjsklfjkl;s fjklsafj kslfjkl fjklasfjklajfklafjaksdlfj lsdkf jsklfskl;f skld fjlk;sfklsfj ksff;kjdsfj sfkl;fkl;fklklfjlk;";
CGSize labelSize = [self.label.text sizeWithFont:[UIFont systemFontOfSize:17] constrainedToSize:CGSizeMake(280, CGFLOAT_MAX)]; // 280 is the width of the label set in IB
self.heightCon.constant = labelSize.height;
self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, labelSize.height +120);
}
在此示例中,heightCon是IBO中对标签的高度约束的IBOutlet。我在viewDidLoad中执行了此操作,但无论您使用文本填充标签,都需要执行此操作。
答案 1 :(得分:1)
您不需要专用于它的整个视图控制器。 UIAlertView应该自动创建一个带有适当按钮的可滚动文本框!
以下简单的几行。不要忘记在头文件中设置UIAlertViewDelegate:
NSString *message = @"This is a test message.\n\nYou should avoid this and that\n\nThis goes to the next line.";
NSString *title = @"Disclaimer";
[[[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:@"No", nil] show];
答案 2 :(得分:0)
我是如何通过创建UITableViewController(称之为DisclaimerViewController)来解决这个问题的。第一行显示文本。第二行是接受单元格,第三行是拒绝单元格。
在新的UITableViewController中创建协议和委托。该协议应具有Accept和Deny的选择器。委托应该允许任何符合新协议的对象。
从Presenting ViewController中,显示新的DisclaimerViewController模式。确保将委托设置为self并实现协议。由于accept和deny单元格位于UITableView的底部,因此您知道用户滚动到底部。没有其他方法可以使用Accept和Deny单元格来点击它们。
这似乎是很多工作,而且确实如此。但是现在,如果还有其他地方我需要一个免责声明文本,我可以重复使用这段代码而无需更改代码。