相关疑难解决方法(0)

如何在Swift中为iOS创建垂直文本UILabel和UITextView?

如果你根据标题来讨论这个问题,但对蒙古语不感兴趣,你可能会寻找这个问答:


我一直在学习Swift,以便为传统的蒙古语开发iOS应用程序.问题是传统的蒙古语是从上到下,从左到右垂直书写的.我的问题是如何垂直显示文本并仍然有换行功能?

如果你和我待在一起,我会试着更清楚地解释这个问题.下面是我想要实现的文本视图的图像.如果外国脚本将你抛弃,我已经包含了遵循相同模式的英文文本.事实上,如果应用程序有任何英文文本要显示,这应该是它的外观.

在此输入图像描述

对于简单的单线UILabel,顺时针旋转90度就可以了.但是,对于多行UITextView,我需要处理换行.如果我只做一个普通的90度旋转,写的第一件事最终会在最后一行.

到目前为止,我已经制定了一个我认为可以解决这个问题的计划:

  1. 制作一个自定义字体,其中所有字母都垂直镜像.
  2. 顺时针旋转文本视图90度.
  3. 水平镜像文本视图.

在此输入图像描述

这应该照顾文本包装.

我可以做镜像字体.但是,我不知道如何为UITextView的旋转和镜像执行Swift编码.我发现以下链接似乎给解决方案的部分提示,但它们都在Objective C中,而不是在Swift中.

应用程序商店中有传统的蒙古应用程序(像这样这个),但我还没有找到任何人共享他们的源代码,所以我不知道他们在幕后做什么来显示文本.我打算让我的代码开源,以便将来的其他人不会为数百万阅读传统蒙古语的人开发应用程序.你可以给予这项努力的任何帮助,不仅是我,也是蒙古人民.即使你不了解自己,提出这个问题以使其更加明显也会有所帮助.

更新

@ sangonz的答案仍然是一个很好的答案,但我暂时将其标记为已接受的答案,因为我无法让一切顺利.特别:

  • 启用滚动(通过在滚动视图中嵌入自定义视图或通过子类化UIScrollView).在github项目中,@ sangonz说这应该很容易,但它不适合我.
  • 在方向改变时获得字线的重新布局(而不是拉伸).我认为通过更多的研究来解决这个问题应该不会太难.
  • 为什么文本行不会一直到视图的边缘?底部存在很大差距.
  • 如何取消链接自定义垂直视图的NSTextStorage与其他UITextView.(见这个问题)

到目前为止,我一直在使用上面提到的原始方法,但我真正想要的是获得类似@sangonz提议的工作方式.

我现在也在考虑其他方法

uitextview uilabel ios swift mongolian-vertical-script

46
推荐指数
1
解决办法
6142
查看次数

在layoutSubviews中旋转视图

背景和目标

目标:我想旋转和翻转UITextView.(为什么:看我之前的问题)

问题:如果我直接对其进行转换UITextView,文本布局会因某种未知原因而混乱.

解决方案:将其UITextView放入UIView容器中,然后对容器执行转换.

新问题:旋转视图上的自动布局(或任何类型的布局)成为一个主要问题.

建议的解决方案:创建一个子类UIView,作为旋转和翻转的附加容器UIView.然后,自动布局应该在此自定义视图上工作.

在此输入图像描述

当前的问题

它首先出现时有效(UITextView背景为黄色):

在此输入图像描述

但是当方向发生变化时,会发生以下情况(蓝色是子类UIView背景,在IB中设置):

在此输入图像描述

如果我禁用该rotationView.addSubview(textView)行,那么旋转容器视图(红色)会自行重新定位,即使在方向更改时也是如此:

在此输入图像描述

所以问题必须是关于我添加的地方UITextView.但是我该怎么办呢?

class MongolTextView: UIView {

    // properties
    var rotationView: UIView!
    var textView: UITextView!

    // This method gets called if you create the view in the Interface Builder
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    // This method …
Run Code Online (Sandbox Code Playgroud)

subclass rotation uiview ios swift

5
推荐指数
1
解决办法
3458
查看次数