0

我需要创建一个带有长文本(已本地化为不同语言)的免责屏幕。

用户应该向下滚动到文本的底部,然后看到“同意”按钮。

由于警报相当有限,我创建了一个 UIViewController,并将 ScrollView 放入其中。

现在我将一个 TextView 放入这个 Scrollview - 但问题是这个 TextView 本身不应该是可滚动的,但应该具有它所包含的完整文本所需的确切大小(这对于每种语言当然是不同的,并且总是超过屏幕高度可以在不滚动的情况下保持)然后在那个长的 TextView 下我需要定位 UIButton。

TextView + Button 都在 ScrollView 中。

由于 UITextView 具有不同的高度,具体取决于当前语言 - 我如何正确设置这个完整的屏幕 - 理想情况下使用 IB。或者如果不能以编程方式实现?

还是有完全不同的更简单的方法?

4

3 回答 3

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);

}

In this example heightCon is the IBOutlet to the height constraint of the label made in IB. I did this in viewDidLoad, but you would need to do this wherever you populate your label with the text.

于 2013-07-08T15:57:04.233 回答
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];
于 2013-07-08T15:27:08.757 回答
0

How I solved this is by creating a UITableViewController (call it DisclaimerViewController). First row displays the text. Second row is an accept cell and third is a deny cell.

Create a protocol and delegate in the new UITableViewController. The protocol should have selectors for Accept and Deny. The delegate should allow for any object that conforms to the new protocol.

在 Presenting ViewController 中,显示新的 DisclaimerViewController 模式。确保将委托设置为 self 并实现协议。由于接受和拒绝单元格位于 UITableView 的底部,因此您知道用户滚动到底部。没有其他方法可以让他们点击接受和拒绝单元格。

这似乎需要做很多工作,而且确实如此。但是现在,如果在其他任何地方我需要免责声明文本,我可以重用此代码而无需更改代码。

于 2013-07-08T21:45:01.190 回答