Alors j'essaie de créer l'effet suivant à l'aide de Xcode Swift. P>
J'essaie de recréer la bulle de formulaire qui contient les champs de texte et les champs de texte eux-mêmes, dans le style suivant. P>
ce que j'ai essayé jusqu'à présent: strong> p>
Création d'une vue d'interface utilisateur avec des bordures courbes, puis utilisez un champ de texte transparent et des uilabels pour indiquer le contenu du champ. P>
Je suppose que ce qui doit être un UitailView étant donné la ligne d'indent, mais je ne sais pas comment styler la View de la même manière. J'ai supposé que je peux utiliser le calque.cornerradius comme je l'ai fait pour l'UIView, mais cela ne semble pas fonctionner. P>
est également le contrôleur d'affichage entier un contrôleur UitaireView ou Uicollectionview? p>
Toute aide sur la manière de créer le formulaire comme ci-dessous serait apprécié. P>
3 Réponses :
Utilisation de première section doit être profil: aucun doute sur cette section, bordez votre cellule la même que la conception p> li>
La deuxième section doit être des informations personnelles. 3 cellules, chaque cellule contient le champ de texte. Vous pouvez calculer et créer une bordure pour la cellule par position correspondante (la cellule supérieure à bout en haut à gauche et à droite sera bordée de la cellule inférieure bordée gauche et droite, sinon pas de bordé) p> li>
Troisième section: Nul doute à ce sujet, une seule cellule (compte de commutation) p> li>
ul> Layer.cornerradius code> pour l'ensemble de la View ne fonctionnera pas. Vous devez utiliser un utableviewController ou un UIViewController normal qui contient une vue de tableView puis divisez votre tableView en 3 sections p>
Merci pour votre suggestion, mais comment éliminez-vous les embarquement pour les cellules. Ils apparaissent toujours au-dessus et au-dessous. Aussi comment voudriez-vous ceci? Vous rembourrez-vous la vue de conteneur intérieur?
Il y a quelques façons de le faire. Vous pouvez soit fabriquer des contraintes de la TableView avec une vue de table avec une vue souper ou une insette dans votre tableViewCell à l'aide de ce Self.contentview.frame = Self.contentview.frame.Inset (par: Yourinset) code>
Dans iOS 13, vous pouvez simplement définir le style sur INSET groupé code> et l'UitailView ressemble exactement à cela - aucun changement supplémentaire nécessaire. P>
J'ai essayé cela, mais je ne pense pas que le même effet est atteint, avez-vous des images?
Merci à Paulo Silva EM> P> STRUT> ETAPE 1: FORT>
Vous pouvez simplement créer un fichier SWIFT nommé comme «Cuiview» (ou votre propre souhait) et utilisez-le après le code IBDesignable à l'intérieur et d'enregistrer. P> //
// CUIView.swift
// CustomUIView
//
// Created by Paulo Silva on 23/08/2019.
// Copyright © 2019 example. All rights reserved.
//
import UIKit
import UIKit
import CoreGraphics
@IBDesignable class CUIView: UIView {
// MARK: - Private Variables -
private let containerView = UIView()
private var containerImageView = UIImageView()
// MARK: - Public Attributes -
@IBInspectable public var backgroundImage: UIImage? {
get {
return self.containerImageView.image
}
set {
// addShadowColorFromBackgroundImage()
self.containerImageView.image = newValue
}
}
override open var backgroundColor: UIColor? {
didSet(new) {
if let color = new {
containerView.backgroundColor = color
}
if backgroundColor != UIColor.clear { backgroundColor = UIColor.clear }
}
}
@IBInspectable var borderColor: UIColor {
get {
return UIColor(cgColor: self.containerView.layer.borderColor!)
}
set {
self.layer.borderColor = newValue.cgColor
self.containerView.layer.borderColor = newValue.cgColor
}
}
@IBInspectable var borderWidth: CGFloat {
get {
return self.containerView.layer.borderWidth
}
set {
self.layer.borderWidth = newValue
self.containerView.layer.borderWidth = newValue
}
}
@IBInspectable var cornerRadius: CGFloat {
get {
return self.containerView.layer.cornerRadius
}
set {
self.layer.cornerRadius = newValue
self.containerView.layer.cornerRadius = newValue
}
}
@IBInspectable var shadowOpacity: Float {
get {
return self.layer.shadowOpacity
}
set {
self.layer.shadowOpacity = newValue
}
}
@IBInspectable var shadowRadius: CGFloat {
get {
return self.layer.shadowRadius
}
set {
self.layer.shadowRadius = newValue
}
}
@IBInspectable var shadowOffset: CGSize {
get {
return self.layer.shadowOffset
}
set {
self.layer.shadowOffset = newValue
}
}
@IBInspectable var shadowColor: UIColor {
get {
return UIColor(cgColor: self.layer.shadowColor!)
}
set {
self.layer.shadowColor = newValue.cgColor
}
}
// @IBInspectable var shadowColorFormImage: Bool = false {
// didSet {
// addShadowColorFromBackgroundImage()
// }
// }
// MARK: - Life Cycle -
override init(frame: CGRect) {
super.init(frame: frame)
addViewLayoutSubViews()
refreshViewLayout()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
addViewLayoutSubViews()
refreshViewLayout()
}
override open func draw(_ rect: CGRect) {
super.draw(rect)
refreshViewLayout()
// addShadowColorFromBackgroundImage()
}
override func layoutSubviews() {
super.layoutSubviews()
refreshViewLayout()
// addShadowColorFromBackgroundImage()
}
// MARK: - Private Methods -
private func refreshViewLayout() {
// View
self.clipsToBounds = true
self.layer.masksToBounds = false
self.layer.cornerRadius = cornerRadius
// Shadow
self.layer.shadowOpacity = shadowOpacity
self.layer.shadowColor = shadowColor.cgColor
self.layer.shadowOffset = shadowOffset
self.layer.shadowRadius = shadowRadius
// Container View
self.containerView.layer.masksToBounds = true
self.containerView.layer.cornerRadius = cornerRadius
// Image View
self.containerImageView.backgroundColor = UIColor.clear
self.containerImageView.image = backgroundImage
self.containerImageView.layer.cornerRadius = cornerRadius
self.containerImageView.layer.masksToBounds = true
self.containerImageView.clipsToBounds = true
self.containerImageView.contentMode = .redraw
}
private func addViewLayoutSubViews() {
// add subViews
self.addSubview(self.containerView)
self.containerView.addSubview(self.containerImageView)
// add image constraints
self.containerImageView.translatesAutoresizingMaskIntoConstraints = false
self.containerImageView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
self.containerImageView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
self.containerImageView.topAnchor.constraint(equalTo: topAnchor).isActive = true
self.containerImageView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
// add view constraints
self.containerView.translatesAutoresizingMaskIntoConstraints = false
self.containerView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
self.containerView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
self.containerView.topAnchor.constraint(equalTo: topAnchor).isActive = true
self.containerView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
}
// private func addShadowColorFromBackgroundImage() {
// // Get the averageColor from the image for set the Shadow Color
// if shadowColorFormImage {
// let week = self
// DispatchQueue.main.async {
// week.shadowColor = (week.containerImageView.image?.averageColor)!
// }
// }
// }
}
extension UIImage {
static func imageWithColor(tintColor: UIColor) -> UIImage {
let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
tintColor.setFill()
UIRectFill(rect)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
func withBackground(color: UIColor, opaque: Bool = true) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, opaque, scale)
guard let ctx = UIGraphicsGetCurrentContext() else { return self }
defer { UIGraphicsEndImageContext() }
let rect = CGRect(origin: .zero, size: size)
ctx.setFillColor(color.cgColor)
ctx.fill(rect)
ctx.concatenate(CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: size.height))
ctx.draw(cgImage!, in: rect)
return UIGraphicsGetImageFromCurrentImageContext() ?? self
}
var averageColor: UIColor? {
guard let inputImage = CIImage(image: self) else { return nil }
let extentVector = CIVector(x: inputImage.extent.origin.x, y: inputImage.extent.origin.y, z: inputImage.extent.size.width, w: inputImage.extent.size.height)
guard let filter = CIFilter(name: "CIAreaAverage", parameters: [kCIInputImageKey: inputImage, kCIInputExtentKey: extentVector]) else { return nil }
guard let outputImage = filter.outputImage else { return nil }
var bitmap = [UInt8](repeating: 0, count: 4)
let context = CIContext(options: [.workingColorSpace: kCFNull as Any])
context.render(outputImage, toBitmap: &bitmap, rowBytes: 4, bounds: CGRect(x: 0, y: 0, width: 1, height: 1), format: .RGBA8, colorSpace: nil)
return UIColor(red: CGFloat(bitmap[0]) / 255, green: CGFloat(bitmap[1]) / 255, blue: CGFloat(bitmap[2]) / 255, alpha: CGFloat(bitmap[3]) / 255)
}
}
extension NSLayoutConstraint {
func constraintWithMultiplier(_ multiplier: CGFloat) -> NSLayoutConstraint {
return NSLayoutConstraint(item: self.firstItem!, attribute: self.firstAttribute, relatedBy: self.relation, toItem: self.secondItem, attribute: self.secondAttribute, multiplier: multiplier, constant: self.constant)
}
}
extension UIScreen {
enum SizeType: CGFloat {
case unknown = 0.0
case iPhone4 = 960.0
case iPhone5 = 1136.0
case iPhone6 = 1334.0
case iPhone6Plus = 1920.0
}
var sizeType: SizeType {
let height = nativeBounds.height
guard let sizeType = SizeType(rawValue: height) else { return .unknown }
return sizeType
}
}
Merci d'avoir fourni une solution mais n'est-ce pas seulement pour l'image de profil (première cellule)? J'essaie de créer l'effet des cellules dans la deuxième section, les champs de texte.
Cette solution n'est pas pour la tableView.Vous pouvez réaliser cette seule mise en œuvre uniquement. Si vous souhaitez le créer dans la cellule de TableView, à juste titre de 2e section pour la première et la dernière cellule, prenez une vue comme arrière-plan et implémentez une extension suivante pour obtenir la vue souhaitée. Pour toutes les autres parties, utilisez simplement une classe donnée pour la vue de la courbe. (Partager mon idée, j'espère que cela aidera). Lien: Stackoverflow.com/a/46542943/7643240