我试过这个,但似乎它不起作用.它受textvIEw的滚动功能的影响,并且正在TextVIEw的中间绘制线条
func addBottomborderWithcolor(color: UIcolor,wIDth: CGfloat) { let border = CALayer() border.backgroundcolor = color.CGcolor border.frame = CGRectMake(0,self.frame.size.height - wIDth,self.frame.size.wIDth,wIDth) self.layer.addSublayer(border) self.layer.masksToBounds = true }
编辑:
TextVIEw具有动态高度.
我想了很多关于我原来的解决方案.
如果你是UITextVIEw的子类来添加底线,那么底线最好是文本视图本身的子视图,而不是它的超级视图.
最后,我找到了一个解决方案,它可以添加底线作为TextVIEw本身的子视图,当用户滚动TextVIEw文本时,底线不会移动.在视图控制器中,您还可以动态更改TextVIEw的框架,底线也会粘在底部.
这是参考代码:
import UIKitclass TextVIEw: UITextVIEw { var border: UIVIEw var originalborderFrame: CGRect var originalinsetBottom: CGfloat deinit { removeObserver(self,forKeyPath: "contentOffset") } overrIDe var frame: CGRect { dIDSet { border.frame = CGRectMake(0,frame.height+contentOffset.y-border.frame.height,frame.wIDth,border.frame.height) originalborderFrame = CGRectMake(0,frame.height-border.frame.height,border.frame.height); } } overrIDe func observeValueForKeyPath(keyPath: String?,ofObject object: AnyObject?,change: [String : AnyObject]?,context: UnsafeMutablePointer<VoID>) { if keyPath == "contentOffset" { border.frame = CGRectOffset(originalborderFrame,contentOffset.y) } } func addBottomborderWithcolor(color: UIcolor,wIDth: CGfloat) { border.backgroundcolor = color border.frame = CGRectMake(0,frame.height+contentOffset.y-wIDth,self.frame.wIDth,wIDth) originalborderFrame = CGRectMake(0,frame.height-wIDth,wIDth) textContainerInset.bottom = originalinsetBottom+wIDth }}
注意:因为我曾经在Objective-C中编写代码,所以我不熟悉Swift.上面的代码仅供您参考(虽然我已经测试了相应的Objective-C代码,但它按预期工作):
>如您所见,没有初始化代码.我试图编写这样的代码,但它总是显示错误,我仍然不知道这一点.只需确保将以下代码添加到TextVIEw初始化代码中:
border = UIVIEw()addSubvIEw(border)originalinsetBottom = textContainerInset.bottomaddobserver(self,forKeyPath: "contentOffset",options: .New,context: nil)
>我不熟悉可选值的概念,包装,解包……所以你应该添加?,!如果需要的话.
原始答案:
你的代码中的self是否意味着TextVIEw?
如果是这样,当您将边框添加为TextVIEw的子图层时,边框将上下移动.
尝试添加边框作为TextVIEw超级视图的子图层而不是TextVIEw本身.
这是代码(注意我将边界从CALayer更改为UIVIEw):
func addBottomborderWithcolor(color: UIcolor,wIDth: CGfloat) { let border = UIVIEw() border.frame = CGRectMake(self.frame.origin.x,self.frame.origin.y+self.frame.height-wIDth,textVIEw.frame.wIDth,wIDth) border.backgroundcolor = color self.supervIEw!.insertSubvIEw(border,aboveSubvIEw: textVIEw) }
这是捕获:
PS.我建议你从宽度到高度更改第二个参数名称,因为宽度在此上下文中是不明确的.
总结以上是内存溢出为你收集整理的将底线边框添加到TextView – iOS全部内容,希望文章能够帮你解决将底线边框添加到TextView – iOS所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)