¿Hay alguna manera de establecer cornerRadius
solo la esquina superior izquierda y superior derecha de a UIView
?
Intenté lo siguiente, pero terminó sin ver más la vista.
UIView *view = [[UIView alloc] initWithFrame:frame];
CALayer *layer = [CALayer layer];
UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRoundedRect:frame byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight) cornerRadii:CGSizeMake(3.0, 3.0)];
layer.shadowPath = shadowPath.CGPath;
view.layer.mask = layer;
view.bounds
, noframe
, (2) la capa debe ser aCAShapeLayer
, noCALayer
; (3) establecer la capapath
, noshadowPath
.Respuestas:
Preste atención al hecho de que si tiene restricciones de diseño adjuntas, debe actualizar esto de la siguiente manera en su subclase UIView:
Si no haces eso, no aparecerá.
Y para redondear esquinas, use la extensión:
Caso de controlador de vista adicional : si no puede o no desea subclasificar una vista, aún puede redondear una vista. Hágalo desde su controlador de vista anulando la
viewWillLayoutSubviews()
función, de la siguiente manera:fuente
No estoy seguro de por qué su solución no funcionó, pero el siguiente código me funciona. Crea una máscara bezier y aplícala a tu vista. En mi código a continuación, estaba redondeando las esquinas inferiores de la
_backgroundView
con un radio de 3 píxeles.self
es una costumbreUITableViewCell
:Versión rápida con algunas mejoras:
Versión Swift 3.0:
Extensión rápida aquí
fuente
viewDidLoad
método, lo movíviewDidAppear
y funcionó.simulator
tamaño en el guión gráfico.ex: if the simulator size is 6s it works fine for 6s, but not of others.
¿Cómo puedo superar esto?path.CGPath
debería serpath.cgPath
viewWillAppear
lugar. Esto tambien funciona.Aquí es un Swift versión de respuesta @JohnnyRockex
Nota
Si está utilizando Diseño automático , deberá subclasificar su
UIView
y llamarroundCorners
a la vistalayoutSubviews
para obtener un efecto óptimo.fuente
.TopRight
y.BottomRight
no parece funcionar para mí.view.roundCorners([.TopLeft , .BottomLeft], radius: 10)
.layoutIfNeeded()
este método.Y finalmente ... ¡hay CACornerMask en iOS11! Con
CACornerMask
esto se puede hacer bastante fácil:fuente
Ejemplo de código Swift aquí: https://stackoverflow.com/a/35621736/308315
No directamente. Tendras que:
CAShapeLayer
path
que estéCGPathRef
basado enview.bounds
pero con solo dos esquinas redondeadas (probablemente usando+[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]
)view.layer.mask
para ser elCAShapeLayer
fuente
Aquí hay un método corto implementado así:
fuente
En swift 4.1 y Xcode 9.4.1
En iOS 11 esta sola línea es suficiente:
Ver el código completo:
Pero para versiones inferiores
El código completo es
Si está utilizando AutoResizing en storyboard, escriba este código en viewDidLayoutSubviews () .
fuente
iOS 11, Swift 4
Y puedes probar este código:
Y puede usar esto en la celda de vista de tabla.
fuente
Esta sería la respuesta más simple:
fuente
Prueba este código,
fuente
Emma:
.TopRight
y.BottomRight
no estoy trabajando para ti tal vez porque la llamadaview.roundCorners
se realiza ANTES de queview bounds
se calculen los finales Tenga en cuenta queBezier Path
deriva de los límites de la vista en el momento en que se llama. Por ejemplo, si el diseño automático reducirá la vista, las esquinas redondeadas en el lado derecho podrían estar fuera de la vista. Intente llamarloviewDidLayoutSubviews
, donde el límite de la vista es final.fuente
Swift 4 Swift 5 manera fácil en 1 línea
Uso:
Función:
En el objetivo-C
Uso:
[self.verticalSeparatorView roundCorners:UIRectCornerTopLeft radius:10.0];
Función utilizada en una categoría (solo una esquina):
fuente
Mi solución para redondear esquinas específicas de UIView y UITextFiels en Swift es usar
y
de UIView real o UITextFields.
Ejemplo:
Y al usar
y
, Puedo especificar la esquina superior derecha e inferior derecha del UITextField para redondear.
Puedes ver el resultado aquí:
fuente
Swift 4
fuente
Una forma de hacer esto mediante programación sería crear una
UIView
parte superior de laUIView
que tenga las esquinas redondeadas. O podrías esconder la parte superior debajo de algo.fuente
fuente
La forma más fácil sería hacer una máscara con una capa de esquina redondeada.
Y no olvides:
fuente
Todas las respuestas ya dadas son realmente buenas y válidas (especialmente la idea de Yunus de usar la
mask
propiedad).Sin embargo, necesitaba algo un poco más complejo porque mi capa a menudo podía cambiar de tamaño, lo que significaba que necesitaba llamar a esa lógica de enmascaramiento cada vez y esto era un poco molesto.
extensions
Usé propiedades rápidas y calculadas para construir un verdaderocornerRadii
propiedad que se encarga de actualizar automáticamente la máscara cuando se diseña la capa.Esto se logró usando Peter Steinberg Great Aspects biblioteca para swizzling.
El código completo está aquí:
Escribí una simple publicación de blog explicando esto.
fuente
Si está buscando una solución única para el creador de interfaces, hay una para iOS 11 y superior . Vea mi respuesta aquí: https://stackoverflow.com/a/58626264
fuente
Así es como puede establecer un radio de esquina para cada esquina de un botón con Xamarin en C # :
fuente
Una hermosa extensión para reutilizar la solución de Yunus Nedim Mehel
Swift 2.3
Uso
fuente
Después de cambiar el bit de código @apinho En swift 4.3 funciona bien
Para usar esta función para ver
fuente
Otra versión de la respuesta de Stephane .
fuente
En Swift 4.2, créalo de
@IBDesignable
esta manera:fuente
Extensión simple
Uso:
fuente