gpt4 book ai didi

ios - 如何在 UITextView 中垂直居中对齐文本

转载 作者:行者123 更新时间:2023-11-29 05:43:31 24 4
gpt4 key购买 nike

我正在尝试将 UITextView 中的文本在中间垂直对齐。搜索后,我找到了代码,它似乎一直有效,直到我们开始键入并在光标跳转时按 Enter 键。当我们在 TextView 中输入时按下 Enter 键时,光标会跳转以调整其位置,我认为这是由于它的调用/实现方式所致。

有没有更好、更优雅的解决方案?

我已将其实现为 UITextView 扩展。此代码取自 Center text vertically in a UITextView 上建议的解决方案之一。

我的问题是解决跳跃问题。这不是上述问题的重复。

extension UITextView {
func alignTextVerticallyInContainer() {
let fittingSize = CGSize(width: bounds.width, height: CGFloat.greatestFiniteMagnitude)
let size = sizeThatFits(fittingSize)
let topOffset = ((bounds.size.height - size.height * zoomScale) / 2)
let positiveTopOffset = max(1, topOffset)
contentOffset.y = -positiveTopOffset + 1
}
}

并从

调用它
override func viewDidLayoutSubviews() {
textView.alignTextVerticallyInContainer()
}

最佳答案

您只需使用自动布局即可完成此操作 - 无需任何代码。

首先添加一个 UIScrollView - 我将其限制为距顶部 80-pts,每侧 20-pts,高度限制为 240(我将背景设置为橙色,以使其易于查看):

enter image description here

接下来,添加一个标准的UIView作为scrollView的 subview (我将背景设置为青色以便于查看)。在每一侧以及顶部和底部将其限制为8-pts(用于一点填充)。将其宽度限制为等于scrollView的宽度,常量为-16(对于侧边距),并将其高度限制为等于scrollView的高度,常量也为-16 (用于顶部/底部填充)。

要点:将高度约束的优先级设置为低(250)。这将允许它在需要时增长:

enter image description here

现在添加一个 UITextView 作为青色 View 的 subview 。仅从一行文本开始。从每一侧将其限制为8-pts(用于填充);将其限制在顶部和底部>= 8-pts;并将其约束在跨度 View 中垂直居中:

enter image description here

当您运行应用程序时,它应该像这样运行(同样,不需要代码):

enter image description here

enter image description here

enter image description here

这是 Storyboard的来源:

<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="LZe-dy-wRt">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="k3M-Zu-xX0">
<objects>
<viewController id="LZe-dy-wRt" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="fZP-6s-NIY">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="guO-HM-qxH">
<rect key="frame" x="20" y="100" width="335" height="240"/>
<subviews>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zW5-KI-gna">
<rect key="frame" x="8" y="8" width="319" height="224"/>
<subviews>
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" text="Start with one line." textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="S6g-U0-TeD">
<rect key="frame" x="8" y="95.5" width="303" height="33"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
</textView>
</subviews>
<color key="backgroundColor" red="0.45138680930000002" green="0.99309605359999997" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="bottom" relation="greaterThanOrEqual" secondItem="S6g-U0-TeD" secondAttribute="bottom" constant="8" id="Ewc-yq-KHO"/>
<constraint firstItem="S6g-U0-TeD" firstAttribute="leading" secondItem="zW5-KI-gna" secondAttribute="leading" constant="8" id="RIE-gD-bX2"/>
<constraint firstAttribute="trailing" secondItem="S6g-U0-TeD" secondAttribute="trailing" constant="8" id="SfV-e8-TXV"/>
<constraint firstItem="S6g-U0-TeD" firstAttribute="top" relation="greaterThanOrEqual" secondItem="zW5-KI-gna" secondAttribute="top" constant="8" id="byT-nx-8K1"/>
<constraint firstItem="S6g-U0-TeD" firstAttribute="centerY" secondItem="zW5-KI-gna" secondAttribute="centerY" id="qGs-hb-AdH"/>
</constraints>
</view>
</subviews>
<color key="backgroundColor" red="1" green="0.83234566450000003" blue="0.47320586440000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="bottom" secondItem="zW5-KI-gna" secondAttribute="bottom" constant="8" id="1xU-wS-Qcb"/>
<constraint firstItem="zW5-KI-gna" firstAttribute="top" secondItem="guO-HM-qxH" secondAttribute="top" constant="8" id="CgB-kT-vjH"/>
<constraint firstItem="zW5-KI-gna" firstAttribute="leading" secondItem="guO-HM-qxH" secondAttribute="leading" constant="8" id="O4I-aF-PEV"/>
<constraint firstAttribute="height" constant="240" id="OZD-dD-yht"/>
<constraint firstAttribute="trailing" secondItem="zW5-KI-gna" secondAttribute="trailing" constant="8" id="QXI-Lh-37A"/>
<constraint firstItem="zW5-KI-gna" firstAttribute="height" secondItem="guO-HM-qxH" secondAttribute="height" priority="250" constant="-16" id="dMe-rS-ZOO"/>
<constraint firstItem="zW5-KI-gna" firstAttribute="width" secondItem="guO-HM-qxH" secondAttribute="width" constant="-16" id="pGF-wL-V4q"/>
</constraints>
</scrollView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<constraints>
<constraint firstItem="XpO-5d-W48" firstAttribute="trailing" secondItem="guO-HM-qxH" secondAttribute="trailing" constant="20" id="Mvu-Ug-NEY"/>
<constraint firstItem="guO-HM-qxH" firstAttribute="leading" secondItem="XpO-5d-W48" secondAttribute="leading" constant="20" id="Rfe-Ev-3xj"/>
<constraint firstItem="guO-HM-qxH" firstAttribute="top" secondItem="XpO-5d-W48" secondAttribute="top" constant="80" id="YhH-mc-af6"/>
</constraints>
<viewLayoutGuide key="safeArea" id="XpO-5d-W48"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="p5Q-GK-BKG" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-10" y="775"/>
</scene>
</scenes>
</document>

关于ios - 如何在 UITextView 中垂直居中对齐文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56351563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com